2015-07-28 2 views
0

Я создал простой NSViewController и хочу добавить разделенный вид только с одним дочерним видом. Сплит-просмотр должен контролироваться NSSplitViewController, потому что я хотел бы использовать средства NSSplitItem для разворачивания/расширения разделенных элементов. После добавления контроллера дочернего представления создается элемент разделения, но в дереве представлений не отображается дочерний вид.NSSplitViewController Child View Not Added

override func viewDidLoad() { 
    super.viewDidLoad() 
    let splitViewController = NSSplitViewController() 
    view.addSubview(splitViewController.splitView) 

    let myController = MyController(nibName: "MyController", bundle: nil) 
    splitViewController.addChildViewController(myController) 

    printTree(view) 
} 

func printTree(view: AnyObject, _ n: Int = 1) { 
    if let view = view as? NSView { 
     NSLog("\(n): \(view)") 
     for child in view.subviews { 
      printTree(child, n + 1) 
     } 
    } 
} 

Выход:

1: <NSView: 0x618000120140> 
2: <NSSplitView: 0x6180001205a0> 

Почему в виде раскола имеет не вид ребенка?


Для сравнения, вот версия без зрения разделенного:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let myController = MyController(nibName: "MyController", bundle: nil) 
    view.addSubview(myController.view) 
    printTree(view) 
} 

Выход:

1: <NSView: 0x6100001203c0> 
2: <NSView: 0x6000001208c0> <-- here's my child view 
3: <NSButton: 0x600000140580> 

А добавив вид ребенка непосредственно как подвид на вид раскола Безразлично» t:

A SplitView managed by a SplitViewController cannot have its subviews modified 

Итак, мой вопрос: почему дочернее представление не добавлено в дерево представлений внутри разделенного представления?

ответ

0

Я понял. Моя ошибка была в том, что я добавил splitView вместо view:

// this won't work: 
self.view.addSubview(splitViewController.splitView) 

// this will work: 
self.view.addSubview(splitViewController.view) 

BTW: используя splitViewController.addChildViewController(myController) как я делал раньше только более короткий способ сказать следующее:

let item = NSSplitViewItem(viewController: myController) 
splitViewController.addSplitViewItem(item) 

, который не работает для меня из-за моей ошибки, описанной выше.

1

«Вы делаете это неправильно»

Вы используете методы базового класса, когда NSSplitViewController имеет очень специфический API.

См. Например: https://developer.apple.com/library/prerelease/mac/samplecode/Exhibition/Listings/Exhibition_GalleryWindowController_swift.html.

Вы хотите метод addSplitViewItem:.

+0

Я нашел свою ошибку (см. Мой ответ), это была еще одна проблема. По вашей ссылке помог мне найти ее, так что спасибо в любом случае :) –