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