如何检查窗口是否打开?

时间:2020-07-24 06:50:37

标签: swift macos cocoa

我正在从主菜单项(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
    }
}


1 个答案:

答案 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)
    }

}