2015-06-08 7 views
3

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

Я пытаюсь загрузить 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] различные виды. Но не повезло. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста? Даже для достойной ссылки? Ничто в Google, похоже, не поможет.

Спасибо.

ответ

12

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

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

Storyboard with NSSplitViewController and NSTabViewController

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

+0

Большое спасибо за идеи. Это отличное решение, и я посмотрю. Спасибо, что нашли время в ответе. – Darren

+0

Как у 'MainSplitViewController' есть ссылка на' detailController'? Разве он не знает только о 'NSSplitItem', который содержит' detailController'? –

+0

Выяснил это. Из моего контроллера главного/меню я использовал 'parent? .childViewControllers [1] как! NSTabViewController! ', Чтобы получить ссылку на вкладки. –