2012-03-23 2 views
6

У нас есть родительский Split вид (NSSplitView) и два подвала, Content и SideBar (боковая панель справа).Как переключить видимость поднабора NSSplitView + скрывать разделитель разбиения панели?

Каким будет оптимальный способ какао для переключения вида SideBar?

  • Я очень люблю его, если предложенное решение включает в себя анимацию
  • Я действительно не нужны какие-либо предложения, связанные с внешними плагинами и т.д. (например BWToolkit)

намекают: I я пытался это сделать, но все же у меня были проблемы, скрывающие разделитель NSSplitView. Как я мог это сделать, одновременно скрывая это?

ответ

6

Вот довольно приличный учебник, который показывает, как это сделать: Unraveling the Mysteries of NSSplitView.

Скрытие разделителя выполняется в функции делегата NSSplitView splitView:shouldHideDividerAtIndex:.

Вам нужно будет изменить размер рамки самостоятельно, если вам не нравится, как это делает NSSplitView.

+0

Спасибо, Натан! Это, кажется, имеет смысл ... –

3

Я написал Swift версию содержания в ссылке из ответа @ Nathan, который работает для меня. В контексте моего примера 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 с раскадрой открытыми Прикладной сценой выберите Вид-> Меню-> Показать боковую панель. CTRL-щелкните «Показать боковую панель», в отправляемых действиях удалите предоставленную, нажмите «x». Из круга CTRL перетащите к первому ответчику в сцену приложения и выберите toggleSideBar для подключения. Откройте раскадровку и выберите первый элемент с разделенным видом и в режиме изменения параметров инспектора атрибутов по умолчанию на боковой панели. Запустите и попробуйте с помощью пункта меню просмотра показать/скрыть. Все сделано в построителе интерфейса без кода. toggleSideBar обрабатывает первый элемент с разделенным представлением. https://github.com/Dis3buted/SplitViewController

+0

Отличный пример, спасибо! –

Смежные вопросы