2015-06-08 276 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告诉我哪个按钮被按下。然后,我尝试从Storyboard中加载splitViewItem[1]各种视图。但没有运气。任何人都可以指出我正确的方向吗?即使是一个体面的参考? Google上没有任何东西似乎可以提供帮助。

谢谢。

回答

12

由于听起来您有一组可以显示的特定窗格,因此使用NSTabViewController可能是完成此操作的最佳方法。

基本上,您的NSSplitViewController有两个孩子:主视图控制器和NSTabViewController。并且选项卡视图控制器为每个详细信息窗格都有其自己的子项。由于选项卡视图控制器不应显示其自己的选项卡选择UI(主窗格正在这样做),因此您可以将tabStyle设置为.Unspecified。其实,故事情节会是这个样子:

Storyboard with NSSplitViewController and NSTabViewController

MainSplitViewController也必须在标签视图控制器,detailController参考。然后在userDidSelectFunction()上,您将detailController的selectedTabViewItemIndex设置为相应的详细信息窗格。 NSTabViewController将负责视图转换,包括在设置之间进行视图之间的动画处理。

+0

非常感谢这些想法。这是一个很好的解决方案,我会看看它。感谢您花时间回复。 – Darren

+0

'MainSplitViewController'如何引用'detailController'?它不仅仅知道包含'detailController'的'NSSplitItem'吗? –

+0

想通了。从我的主/菜单视图控制器中,我使用'parent?.childViewControllers [1]! NSTabViewController!'以获取对这些选项卡的引用。 –