我正在从主菜单项(Window下的Command 2)打开一个窗口,说“ Window2”。因此,如果再次单击菜单项,它将再次打开“ Window2”,而不是使现有窗口成为键窗口并禁用相应的菜单项。下面是我在AppDelegate类中实现该目标的努力,因为变量“ lmWindowController”始终返回nil,window2的实例被多次打开,因此我在这里遗漏了什么?
class AppDelegate: NSObject, NSApplicationDelegate {
var lmWindowController: LocalisationMappingWindowController?
func applicationDidFinishLaunching(_ notification: Notification) {
}
@IBAction func showLocalisationMappingWindowController(_ sender: Any) {
if (!(lmWindowController != nil)) {
let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "LocalisationMapping"), bundle: Bundle.main)
if let windowController: NSWindowController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "LocalisationMappingWindowController")) as? NSWindowController{
windowController.showWindow(windowController.window)
windowController.window?.makeKeyAndOrderFront(nil)
}
} else {
lmWindowController?.window?.makeKeyAndOrderFront(nil)
}
}
override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
var enable = self.responds(to: menuItem.action)
if menuItem.action == #selector(showLocalisationMappingWindowController(_:)) {
for window in NSApplication.shared.windows {
if window.title == "Localization Mapping" {
enable = false
}
}
}
return enable
}
}
答案 0 :(得分:0)
在showLocalisationMappingWindowController
中,新的windowController
已加载,但lmWindowController
不变。添加lmWindowController = windowController
。
@IBAction func showLocalisationMappingWindowController(_ sender: Any) {
if (!(lmWindowController != nil)) {
let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "LocalisationMapping"), bundle: Bundle.main)
if let windowController: NSWindowController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "LocalisationMappingWindowController")) as? NSWindowController{
windowController.showWindow(windowController.window)
windowController.window?.makeKeyAndOrderFront(nil)
lmWindowController = windowController
}
} else {
lmWindowController?.window?.makeKeyAndOrderFront(nil)
}
}