2015-06-08 234 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!'以獲取對這些選項卡的引用。 –