NSView无法观察到NSWindow的变化--KVO和Swift

时间:2016-12-15 05:16:50

标签: swift swift3 key-value-observing swift3.0.2

我很难让NSView观察其父NSWindow的变化。我在一个只有NSWindow MyView的{​​{1}}子类的测试项目中尝试了这个,只是为了看看我是否遗漏了什么。

NSView

我也尝试了here的建议,但没有运气。我还检查了其他答案,但无法找到答案。大多数封面使您自己的KVO级别符合要求。我想观察一个NSWindow对象。我错过了什么?

1 个答案:

答案 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!")
    }
}