如何检查哪个 NSViewController 处于活动状态 swift

How to check which NSViewController is active swift

我有一个包含多个 ViewController 的应用程序,我需要在 AppDelegate 中检查哪个 ViewController 处于活动状态。例如,我将创建一个运行函数的计时器,该函数检查特定 ViewController 是否处于活动状态,如果是,则执行一些操作。有什么办法吗?

您可以通过访问 AppDelegate 或其他任何地方的根视图控制器来获取此信息:

let activeController = window.rootViewController

但是,由于您想使用计时器在该视图控制器中执行某些代码,因此发送 NSNotification 可能更可取。由于 "active" 视图控制器应该知道它处于活动状态,因此您可以专门连接和断开通知侦听器。

NSApplication.sharedApplication().keyWindow

将 return 当前 window 具有键盘访问权限。从那里您可以内省 NSWindow 对象以确定它是哪个对象。

此外,如果您需要以编程方式激活它 windows。

NSApplication.sharedApplication().windows

将 return 您的应用程序中的一组 NSWindows 当前打开。

window.makeKeyAndOrderFront(sender)

将使 window 成为焦点,即使它被最小化并使其成为键盘控制的键 window。

window.makeKeyWindow()

只会使 window 成为焦点并使其成为键 window。它不会使它脱离最小化。

我在我的 AppDelegate 中使用这个模式来查看哪个视图控制器有我当前正在处理的文档:

 var vc: ViewController? = nil

 func iHaveFocus() -> Bool {
        let win = NSApplication.shared.keyWindow
        if (win != nil) {
            vc = win!.contentViewController as? ViewController
            if (vc != nil) {
                return true
            }
        } else {
            vc = nil
        }
        return false
    }

// Then to see which document gets something like a paste...

 @IBAction func pasteStuff(_ sender: Any) {
    if (iHaveFocus()) {
        vc!.pasteStuff()
    }
}