更改NSSplitViewController内的视图

时间:2015-06-08 23:33:27

标签: swift cocoa nssplitview

我正在尝试迁移我的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]各种视图。但没有运气。有人能指出我正确的方向吗?即使是一个体面的参考?谷歌上没有任何东西似乎有所帮助。

感谢。

1 个答案:

答案 0 :(得分:13)

由于听起来您可以显示一组特定的详细信息窗格,因此使用NSTabViewController可能是实现此目的的最佳方法。

基本上,您的NSSplitViewController有两个孩子:主视图控制器和NSTabViewController。选项卡视图控制器为每个详细信息窗格都有自己的子项。由于选项卡视图控制器不应显示其自己的选项卡选择UI(主窗格正在执行此操作),因此您应将tabStyle设置为.Unspecified。故事板看起来像这样:

Storyboard with NSSplitViewController and NSTabViewController

您的MainSplitViewController也会引用标签视图控制器detailController。然后在userDidSelectFunction()上,您将detailController的selectedTabViewItemIndex设置为相应详细信息窗格的那个。 NSTabViewController将负责视图转换,包括在设置的情况下在窗格之间设置动画。