带有 NSWindowController 的菜单栏应用
Menubar app with NSWindowController
我目前正在尝试构建一个菜单栏应用程序。因此,我需要一个 NSWindowController 作为登录字段。必须可以在按下菜单项时打开此 NSWindowController,并在用户单击取消时关闭 window。
我使用了 showWindow(self)
和 NSApp.hide(self)
但这对我不起作用。那么有人知道我可以尝试什么吗?
假设您使用的是 Storyboard
- 将
NSWindowController
添加到故事板并取消选中 window 的 visible at launch
。
在AppDelegate
中创建一个属性windowController
var windowController : NSWindowController!
在 AppDelegate
中创建一个 IBAction
。
在动作中使用
获取主故事板
let mainStoryBoard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil)
然后实例化并分配window控制器(标识符必须与故事板标识符匹配)
windowController = mainStoryBoard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "Login")) as! NSWindowController
获取关联的视图控制器(LoginController
是视图控制器的自定义class)
let loginController = windowController.window!.contentViewController as! LoginController
显示主要window
windowController.showWindow(self)
在 Interface Builder 中将 NSMenuItem
连接到 First Responder
(红色立方体),然后连接到创建的 IBAction
.
您可以使用红色 close
按钮关闭 window,或者您需要添加自定义逻辑。
如果您使用 XIB 创建一个 NSWindowController
subclass 并使用 windowController = MyWindowController(window: nil)
加载 XIB,使用 NSApp.activate(ignoringOtherApps: true)
激活您的应用程序获取关联的 window 与 let controllerWindow = windowController.window!
并显示 window 与 controllerWindow.makeKeyAndOrderFront(self)
抱歉,您的代码在我的项目中崩溃了。我做错了什么?
我目前正在尝试构建一个菜单栏应用程序。因此,我需要一个 NSWindowController 作为登录字段。必须可以在按下菜单项时打开此 NSWindowController,并在用户单击取消时关闭 window。
我使用了 showWindow(self)
和 NSApp.hide(self)
但这对我不起作用。那么有人知道我可以尝试什么吗?
假设您使用的是 Storyboard
- 将
NSWindowController
添加到故事板并取消选中 window 的visible at launch
。 在
AppDelegate
中创建一个属性windowController
var windowController : NSWindowController!
在
AppDelegate
中创建一个IBAction
。在动作中使用
获取主故事板let mainStoryBoard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil)
然后实例化并分配window控制器(标识符必须与故事板标识符匹配)
windowController = mainStoryBoard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "Login")) as! NSWindowController
获取关联的视图控制器(
LoginController
是视图控制器的自定义class)let loginController = windowController.window!.contentViewController as! LoginController
显示主要window
windowController.showWindow(self)
在 Interface Builder 中将
NSMenuItem
连接到First Responder
(红色立方体),然后连接到创建的IBAction
.
您可以使用红色 close
按钮关闭 window,或者您需要添加自定义逻辑。
如果您使用 XIB 创建一个 NSWindowController
subclass 并使用 windowController = MyWindowController(window: nil)
加载 XIB,使用 NSApp.activate(ignoringOtherApps: true)
激活您的应用程序获取关联的 window 与 let controllerWindow = windowController.window!
并显示 window 与 controllerWindow.makeKeyAndOrderFront(self)
抱歉,您的代码在我的项目中崩溃了。我做错了什么?