Изменить представления внутри NSSplitViewController

Я пытаюсь перенести свой Objective-C и теперь улучшаю знания Swift в приложении для Mac OS X. Крутая кривая обучения!

Я пытаюсь загрузить NSSplitViewController с разными представлениями в «детальном представлении» в зависимости от нажатых кнопок в «основном представлении», если хотите. Следование инструкциям и многочасовые поиски ни к чему не привели.

В настоящее время у меня есть:

import Cocoa

class MainSplitView: NSSplitViewController, BlissWindowDelegate {

    var masterViewController: vcMainMenu {
        let masterItem = splitViewItems[0] as! NSSplitViewItem
        return masterItem.viewController as! vcMainMenu
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        masterViewController.delegate = self

    }

    func userDidSelectFunction(function: String) {

        switch function {
        case "app":
            println("You have selected to load the appointment screen")
        case "cust":
            println("You have selected to load the customer screen")
        case "login":
            println("I think I am here and you've clicked login?")
            let detailItem = splitViewItems[1] as! NSSplitViewItem

            // Trying to load the views here ... but no idea how to

        case "admin":
            println("You've clicked admin")
        default:
            println("Nothing here ...")

        }

    }

} 

Я использую BlissWindowDelegate, чтобы сказать мне, какая кнопка была нажата. Затем я пытаюсь загрузить в splitViewItem[1] различные представления из раскадровки. Но не повезло. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста? Даже для приличной ссылки? Ничего в гугле не помогает.

Спасибо.


person Darren    schedule 08.06.2015    source источник


Ответы (1)


Поскольку похоже, что у вас есть определенный набор панелей сведений, которые можно отобразить, использование NSTabViewController, вероятно, является лучшим способом добиться этого.

По сути, у вашего NSSplitViewController есть два дочерних элемента: основной контроллер представления и NSTabViewController. И у контроллера представления вкладок есть свои дочерние элементы для каждой панели сведений. Поскольку контроллер представления вкладок не должен представлять свой собственный пользовательский интерфейс выбора вкладок (это делает основная панель), вы должны установить tabStyle равным .Unspecified. Раскадровка будет выглядеть примерно так:

Раскадровка с NSSplitViewController и NSTabViewController

Ваш MainSplitViewController также будет иметь ссылку на контроллер представления вкладок, detailController. Затем на userDidSelectFunction() вы должны установить selectedTabViewItemIndex для detailController значение соответствующей панели сведений. NSTabViewController позаботится о переходе вида, включая анимацию между панелями, если это настроено.

person Taylor    schedule 09.06.2015
comment
Большое спасибо за идеи. Это отличное решение, и я посмотрю на него. Спасибо, что нашли время ответить. - person Darren; 09.06.2015
comment
Как MainSplitViewController имеет ссылку на detailController? Разве он не знает только о NSSplitItem, который содержит detailController? - person Clifton Labrum; 25.12.2016
comment
Догадаться. Из моего главного контроллера представления/меню я использовал parent?.childViewControllers[1] as! NSTabViewController!, чтобы получить ссылку на вкладки. - person Clifton Labrum; 25.12.2016
comment
let tabView = parent?.children[1] as? NSTabViewController? tabView??.selectedTabViewItemIndex = 1 Просто обновление синтаксиса. - person cameck; 24.12.2020