如何检查哪个 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()
}
}
我有一个包含多个 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()
}
}