我已经创建了一个简单的NSViewController,并希望添加一个只包含一个子视图的拆分视图。拆分视图应该由NSSplitViewController控制,因为我希望使用NSSplitItem的工具来折叠/展开拆分项。在添加子视图控制器后,将创建拆分项,但没有向视图树中添加子视图。
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>并且将子视图直接作为子视图添加到拆分视图中也不起作用:
A SplitView managed by a SplitViewController cannot have its subviews modified所以,我的问题是,为什么子视图没有添加到拆分视图中的视图树中?
发布于 2015-07-29 04:49:46
我想通了。我的错误是我添加了splitView而不是view
// this won't work:
self.view.addSubview(splitViewController.splitView)
// this will work:
self.view.addSubview(splitViewController.view)顺便说一句:像我以前做的那样,使用splitViewController.addChildViewController(myController)只是一种简短的说法:
let item = NSSplitViewItem(viewController: myController)
splitViewController.addSplitViewItem(item)因为我上面描述的错误,这对我不起作用。
发布于 2015-07-28 21:57:41
https://stackoverflow.com/questions/31687592
复制相似问题