如何检查哪个NSViewController是活动的swift

时间:2015-01-15 16:16:36

标签: swift macos nsviewcontroller

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

3 个答案:

答案 0 :(得分:2)

NSApplication.sharedApplication().keyWindow

将返回具有键盘访问权限的当前窗口。从那里你可以反省NSWindow对象来确定它是什么。

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

NSApplication.sharedApplication().windows

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

window.makeKeyAndOrderFront(sender)

即使从最小化开始,也会使窗口成为焦点,并使其成为键盘控制的关键窗口。

window.makeKeyWindow()

只需将窗口置于焦点并使其成为关键窗口。它不会使它最小化。

答案 1 :(得分:1)

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

let activeController = window.rootViewController

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

答案 2 :(得分:0)

我在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()
    }
}