我很难让NSView
观察其父NSWindow
的变化。我在一个只有NSWindow
MyView
的{{1}}子类的测试项目中尝试了这个,只是为了看看我是否遗漏了什么。
NSView
我也尝试了here的建议,但没有运气。我还检查了其他答案,但无法找到答案。大多数封面使您自己的KVO级别符合要求。我想观察一个NSWindow对象。我错过了什么?
答案 0 :(得分:0)
因此看起来NSWindowDidBecomeKey
需要将Notification
发布到默认NotificationCenter
而不是窗口本身。这是正确的代码
class MyView: NSView {
//add observer on awake from nib
//works fine
override func awakeFromNib() {
if let win = self.window {
NotificationCenter.default.addObserver(self, selector: #selector(self.windowIsKey(_:)), name: .NSWindowDidBecomeKey, object: win)
}
}
//remove observer on dealloc
//allso works fine
deinit {
if let win = self.window {
NotificationCenter.default.removeObserver(self, name: .NSWindowDidBecomeKey, object: win)
}
}
//now this method is called and works fine
func windowIsKey(_ notification: Notification) {
Swift.print("worked!")
}
}