【发布时间】:2021-10-01 01:11:34
【问题描述】:
我正在尝试跟踪创建的窗口焦点,以便对这些事件执行操作。
我可以使用NSView.frameDidChangeNotification 在通知中心跟踪窗口框架尺寸,但我找不到使用NSWindowDidResignKeyNotification 或NSWindowDidResignMainNotification 之类的正确方法。
private func newWindow() {
let windowInfo = WindowInfo()
let contentView = ContentView()
.environmentObject(windowInfo)
let window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 350, height: 600),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered,
defer: false
)
window.isReleasedWhenClosed = false
window.contentView = NSHostingView(rootView: contentView)
window.contentView?.postsFrameChangedNotifications = true
window.makeKeyAndOrderFront(nil)
// vvv I'm trying to use a similar method of being notified when a created window loses/regains focus. vvv
// v v v
NotificationCenter.default.addObserver(forName: NSView.frameDidChangeNotification, object: nil, queue: nil) { (notification) in
windowInfo.frame = window.frame
}
}
另外,如果在 SwiftUI 中有一些检测窗口焦点的方法,我也可以使用它。执行操作的通知适用于我在 SwiftUI 中的视图
【问题讨论】:
-
请贴出你试过的代码。
-
必须在创建窗口之前使用 NotificationCenter.default.addObserver 才能捕获通知
标签: swift macos nswindow appkit