OS X addsubview从xib快速

Swi*_*y85 1 macos xcode cocoa nsviewcontroller swift

我正在尝试使用 swift for OS X 从笔尖添加一个新的子视图。

到目前为止,我已经:

  • 创建了一个新的“可可应用程序”
  • 添加了一个名为“TestSubView”的新“Cocoa Class”作为带有 XIB 文件的 NSViewController 的子类

我想在应用程序加载时将此子视图添加到我的主视图中。

在我的 ViewController (主窗口的 ViewController )中,我有。

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let newSubView = TestSubView();
        self.view.addSubview(newSubView.view);

    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误

Failed to set (contentViewController) user defined inspected property on (NSWindow): 
-[NSNib initWithNibNamed:bundle:] could not load the nibName: temp.TestSubView in bundle (null).
Run Code Online (Sandbox Code Playgroud)

我意识到我需要调整这个子视图的大小和位置,但我似乎无法做到这一点。

我花了一天的大部分时间试图解决这个问题,所以任何帮助都将不胜感激。

Swi*_*y85 5

我终于让这件事起作用了。我的新代码看起来像

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let subview = TestSubView(nibName: "TestSubView", bundle: nil)!
        self.view.addSubview(subview.view)
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在文档此答案的帮助下找到

有人建议,如果笔尖名称和类名称相同,则不需要声明 nibname:(正如我最初尝试做的那样),但文档没有提到这一点 - 解释了为什么它不起作用!

为了繁荣,这在 OS X Yosemite (10.10.1) 上使用 Xcode 6.1.1 对我有用