Change views inside NSSplitViewController

3.3k views Asked by At

I'm trying to migrate my Objective-C and now improving Swift knowledge to an application for Mac OS X. Steep learning curve!

I'm trying to load a NSSplitViewController with different views in the "detail view" depending on buttons pressed on the "master view" if you will. Following tutorials and searching for hours has led me to nothing.

I currently have:

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 ...")

        }

    }

} 

I'm using BlissWindowDelegate to tell me which button was pressed. I am then trying to load into the splitViewItem[1] various views from a Storyboard. But having no luck. Can anyone point me in the right direction please? Even for a decent reference? Nothing on Google is seeming to help.

Thanks.

1

There are 1 answers

4
Taylor On BEST ANSWER

Since it sounds like you have a specific set of detail panes that can be shown, using an NSTabViewController is probably best way to accomplish this.

Basically, your NSSplitViewController has two children: the master view controller, and a NSTabViewController. And the tab view controller has its own children for each of the detail panes. Since tab view controller shouldn't present its own tab selection UI (the master pane is doing that), you would set the tabStyle to be .Unspecified. The storyboard would look something like this:

Storyboard with NSSplitViewController and NSTabViewController

Your MainSplitViewController would also have a reference to the tab view controller, detailController. Then on userDidSelectFunction(), you would set the detailController's selectedTabViewItemIndex to be that of the corresponding detail pane. NSTabViewController will take care of the view transition, including animating between the panes if setup to do so.