我正在寻找一个从 AppDelegate 创建窗口的简单(和 Mac 特定的)示例。我的程序有一个登录页面,可能需要也可能不需要在应用程序启动时显示,具体取决于用户是否已经登录。
到目前为止,我的 AppDelegate 的 applicationDidFinishLaunching 看起来像这样:
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
let main = NSStoryboard(name : "Main", bundle: nil).instantiateController(withIdentifier: "MainWindow") as! NSWindowController
main.window?.becomeFirstResponder()
let mainVc = NSStoryboard(name:"Main", bundle: nil).instantiateController(withIdentifier: "MainViewController") as! ViewController
main.window?.contentViewController = mainVc
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,什么也没有发生。我应该注意到我已经取消了应用设置的“主界面”属性。如果我不取消设置,则会出现我想要的两个版本的窗口,这表明我对上述内容几乎是正确的。
我错过了什么?
您需要在 applicationDidFinishLaunching 方法之外声明 NSWindowController 变量 main 。您还需要调用 makeKeyAndOrderFront(nil) 而不是成为FirstResponder:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var main: NSWindowController!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
main = NSStoryboard(name : "Main", bundle: nil).instantiateController(withIdentifier: "MainWindow") as! NSWindowController
let mainVc = NSStoryboard(name:"Main", bundle: nil).instantiateController(withIdentifier: "MainViewController") as! ViewController
main.window?.contentViewController = mainVc
main.window?.makeKeyAndOrderFront(nil)
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2279 次 |
| 最近记录: |