2012-03-23 60 views
6

我們有一個家長Split查看(NSSplitView)和兩個子視圖ContentSideBar(側邊欄位於右側)。如何切換NSSplitView子視圖的可見性+隱藏窗格分割器分隔線?

什麼是最佳的可可友好的方式來切換SideBar視圖?

  • 我真的很喜歡它,如果建議的解決方案包括動畫
  • 我真的不需要與外部插件任何建議,等(如BWToolkit)

提示:我我一直在試圖做到這一點,但我仍然遇到了隱藏NSSplitView分隔線的問題。我怎麼能這樣做,同時又隱藏它?

回答

3

我在@ Nathan的答案中爲我寫了一個Swift版本的鏈接內容。在我的例子的情況下splitView被設置在其他地方,可能是因爲在一個無所不包類實例屬性:

func toggleSidebar() { 
    if splitView.isSubviewCollapsed(splitView.subviews[1] as NSView) { 
     openSidebar() 
    } else { 
     closeSidebar() 
    } 
} 

func closeSidebar() { 
    let mainView = splitView.subviews[0] as NSView 
    let sidepanel = splitView.subviews[1] as NSView 
    sidepanel.hidden = true 
    let viewFrame = splitView.frame 
    mainView.frame.size = NSMakeSize(viewFrame.size.width, viewFrame.size.height) 
    splitView.display() 
} 

func openSidebar() { 
    let sidepanel = splitView.subviews[1] as NSView 
    sidepanel.hidden = false 
    let viewFrame = splitView.frame 
    sidepanel.frame.size = NSMakeSize(viewFrame.size.width, 200) 
    splitView.display() 
} 

這些功能可能會在一個類中的方法,他們是我的。如果你的splitView可以是nil你顯然必須檢查。這也假設你有兩個子視圖,索引1處的子視圖,這裏是sidePanel是你想摺疊的那個。

2

我用上面的代碼得到了一些工件,可能是因爲它與上下文無關。我相信它的工作原理在哪裏。總之,這裏是一個非常精簡的實現:

// this is the declaration of a left vertical subview of 
// 'splitViewController', which is the name of the split view's outlet 

var leftView: NSView { 
    return self.splitViewController.subviews[0] as NSView 
    } 

// here is the action of a button that toggles the left vertical subview 
// the left subview is always restored to 100 pixels here 

@IBAction func someButton(sender: AnyObject) { 

    if splitViewController.isSubviewCollapsed(leftView) { 
     splitViewController.setPosition(100, ofDividerAtIndex: 0) 
     leftView.hidden = false 
    } else { 
     splitViewController.setPosition(0, ofDividerAtIndex: 0) 
     leftView.hidden = true 
    } 
} 

要使用動畫看到一個很好的例子,控制點擊下載this file

2

在帶故事板的Xcode 9.0中打開應用場景選擇View-> Menu-> Show sidebar。按CTRL並單擊顯示側欄,在發送的操作中刪除提供的操作,單擊x。從圓圈CTRL拖動到應用程序場景中的First Responder,然後選擇toggleSideBar以連接到。打開故事板並選擇第一個拆分視圖項目,並在屬性檢查器中將行爲從默認變爲側欄。運行並嘗試查看菜單項顯示/隱藏。所有在界面生成器中完成的無代碼。 toggleSideBar處理第一個分割視圖項目。 https://github.com/Dis3buted/SplitViewController

+0

很好的例子,謝謝! – 2017-10-31 18:24:19