首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未添加NSSplitViewController子视图

未添加NSSplitViewController子视图
EN

Stack Overflow用户
提问于 2015-07-28 21:39:19
回答 2查看 1.1K关注 0票数 0

我已经创建了一个简单的NSViewController,并希望添加一个只包含一个子视图的拆分视图。拆分视图应该由NSSplitViewController控制,因为我希望使用NSSplitItem的工具来折叠/展开拆分项。在添加子视图控制器后,将创建拆分项,但没有向视图树中添加子视图。

代码语言:javascript
复制
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)
        }
    }
}

输出:

代码语言:javascript
复制
1: <NSView: 0x618000120140>
2: <NSSplitView: 0x6180001205a0>

为什么拆分视图没有子视图?

要比较一下,这里是没有拆分视图的版本:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    let myController = MyController(nibName: "MyController", bundle: nil)
    view.addSubview(myController.view)
    printTree(view)
}

输出:

代码语言:javascript
复制
1: <NSView: 0x6100001203c0>
2: <NSView: 0x6000001208c0>  <-- here's my child view
3: <NSButton: 0x600000140580>

并且将子视图直接作为子视图添加到拆分视图中也不起作用:

代码语言:javascript
复制
A SplitView managed by a SplitViewController cannot have its subviews modified

所以,我的问题是,为什么子视图没有添加到拆分视图中的视图树中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-29 04:49:46

我想通了。我的错误是我添加了splitView而不是view

代码语言:javascript
复制
// this won't work:
self.view.addSubview(splitViewController.splitView)

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

顺便说一句:像我以前做的那样,使用splitViewController.addChildViewController(myController)只是一种简短的说法:

代码语言:javascript
复制
let item = NSSplitViewItem(viewController: myController)
splitViewController.addSplitViewItem(item)

因为我上面描述的错误,这对我不起作用。

票数 0
EN

Stack Overflow用户

发布于 2015-07-28 21:57:41

“你做错了”

当NSSplitViewController具有非常特殊的API时,您将使用基类方法。

参见:swift.html作为一个例子。

您需要addSplitViewItem:方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31687592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档