【问题标题】:How to check which NSViewController is active swift如何快速检查哪个 NSViewController 处于活动状态
【发布时间】:2015-01-15 16:16:36
【问题描述】:

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

【问题讨论】:

  • 嘿 Niktin,您是否正在加载某种容器控制器来容纳这些视图控制器,例如 TabBar 控制器或导航控制器?
  • 不,只是一些视图控制器,与 segues 连接
  • window.view.rootViewController ? (这可能仅适用于 iOS)
  • “活跃”到底是什么意思?是否有重点?
  • @ThomasKilian 是的,当用户使用它时

标签: swift macos nsviewcontroller


【解决方案1】:
NSApplication.sharedApplication().keyWindow

将返回具有键盘访问权限的当前窗口。从那里您可以自省 NSWindow 对象以确定它是哪个。

如果您需要它以编程方式激活窗口。

NSApplication.sharedApplication().windows

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

window.makeKeyAndOrderFront(sender)

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

window.makeKeyWindow()

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

【讨论】:

    【解决方案2】:

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

    let activeController = window.rootViewController
    

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

    【讨论】:

    • 非常感谢,但您编写的代码不起作用(使用未解析的标识符“window”,用 AppDelegate 编写),但 NSNotification 的想法似乎不错
    • 可以通过调用[UIApplication sharedApplication].keyWindow获取活动窗口。
    • 对于macos它是window.contentViewController
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多