从NSViewController在OS X上加载nib

问题描述 投票:0回答:1

我正在尝试从OS X上的NSWindow加载NSViewController,我正在做以下事情:

private lazy var discoverable: DiscoverableWindow = {
     return DiscoverableWindow.instanceFromNib()
} ()

静态方法instanceFromNib()定义如下:

class func instanceFromNib() -> DiscoverableWindow {
    var instance = DiscoverableWindow()
    var objects: NSArray?
    NSBundle.mainBundle().loadNibNamed("DiscoverableWindow", owner: instance, topLevelObjects: &objects)
    return instance
}

我正在使用窗口显示我的NSViewController

    NSApp.beginSheet(self.discoverable, modalForWindow: NSApplication.sharedApplication().mainWindow!, modalDelegate: nil, didEndSelector: nil, contextInfo: nil)

但是,当我加载它时,我看到以下内容:

enter image description here

有什么我做错了吗?为什么NSWindow空白?我在这上面阅读了以下内容:

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html

Cocoa - loadNibNamed:owner:topLevelObjects: from loaded bundle

Cocoa: NSApp beginSheet sets the application delegate?

macos nswindow nib
1个回答
1
投票

你为什么不制作一个窗口控制器来处理DiscoverableWindow

创建NSWindowController的子类,确保选中“还为用户界面创建xib文件”。在DiscoverableWindowController xib中配置窗口,在窗口的属性检查器上取消选中“Visible At Launch”。

enter image description here

然后,在你的ViewController

@IBAction func showSheet(sender: NSButton) {
    let discoverableWC = DiscoverableWindowController(windowNibName: "DiscoverableWindowController")
    view.window?.beginSheet(discoverableWC.window!, completionHandler: nil)
}

通常,应用程序中的每个窗口都应由其自己的窗口控制器管理,让窗口控制器为您处理nib加载和实例化。

Download the sample project here

© www.soinside.com 2019 - 2024. All rights reserved.