2016-09-06 48 views
0

我有一個問題,現在我試圖解決很長一段時間。項目文件也提供。從Swift Storyboards for mac切換到另一個NSViewController

所以我有以下想法,有一個側邊欄的按鈕,當按鈕被點擊時,它只切換右側的內容。

我最初創建了一個只有1個故事板的項目。 Window使用按鈕和自定義視圖啓動第一個ViewController。

我需要的是當按下其中一個按鈕時,自定義視圖被替換爲另一個ViewController的內容。只是視圖,而不是整個以前的視圖控制器被另一個取代。

我該怎麼做?塞格斯?圖層?由於我無法找出故事板,所以請急需幫助,但想與他們合作很多。這會讓我開始。

我在想另一個選擇是如果我使用splitview會更好嗎?那麼我可以用另一個完全正確地替換右側視圖監控器?

Link to project file in Xcode

My Storyboard

+1

在這種情況下,我會用筆尖文件對孩子的看法和與加載它們'loadNibNamed:業主:topLevelObjects :'另一個建議是選項卡視圖控制器 - 在故事板中效果很好 - 但按鈕將位於頂部。 – vadian

回答

0

我創建這個與textlable但是是一樣的。

  1. 創建「@IBOutlet weak var labelListInvoices:NSTextField!」
  2. 創建行動 「@IBAction FUNC onListInvoices(_發件人:AnyObject){ 讓行爲= InvoicesList(nibName: 」「:(ACT!),包零 app.show InvoicesList)」
  3. 創建一個變種「變種應用= NSApp.delegate爲AppDelegate的 「
  4. 現在去的appdelegate創建此FUNC 」 // APP董事

    //使用: //讓行動=的MainView(nibName 「的MainView」,捆綁:無) // app.show(act!) func show(_ newController:ControllerType,帶消息:參數TER值? =無){ 讓NewView的= newController.view

    if let frame = NSApp.mainWindow?.contentView?.frame { 
        newView.frame = frame       // Resize the view to the window instead 
    } 
    
    guard let main = NSApp.mainWindow?.contentViewController else { return } 
    
    if main.childViewControllers.count < 1 {   // if no controllers, then it's main controller 
        main.addChildViewController(newController)    // add new controller 
        main.view.addSubview(newView)     // add new view to main view 
        if message != nil { 
         newController.notify(message) 
        } 
    } else { 
        let current = main.childViewControllers.last // get lasr controller as current before adding new 
        main.addChildViewController(newController)    // add new controller 
        main.transition(from: current!, to: newController, options: [.crossfade]){ 
         if message != nil { 
          newController.notify(message) 
         } 
        } 
    } 
    

    } 「

相關問題