textchange上的Swift macOS通知

时间:2017-09-07 19:51:41

标签: swift macos nsnotification

在我的NSViewController中,我有一个NSTexField,每次内容发生变化时都会触发通知。

我还有几个按钮,它们定义了IBActions来将字符写入NSTextField。 但是每次按下其中一个按钮时,NSTextField都会更新。通知未被解雇。

如何手动触发NSControlTextDidChange事件?

override func controlTextDidChange(_ notification: Notification) {
    if let textField = notification.object as? NSTextField {
       filterTable(with: textField.stringValue)
    }
}

@IBAction func pressedKeyButton(_ sender: NSButton) {
    let character = sender.title
    self.searchTextField.stringValue.append(character)
    self.searchTextField.textDidChange(Notification(name:  .NSControlTextDidChange,object: nil))
}

1 个答案:

答案 0 :(得分:1)

由于这是一款Mac应用,因此您可以通过使用Cocoa Bindings填充文本字段来简化这一过程。只需在视图控制器上使用dynamic块声明didSet属性,如下所示:

@objc dynamic var searchString: String = "" {
    didSet { /* put notification code here */ }
}

然后,在Interface Builder中,在Bindings Inspector中,将文本字段的Value绑定绑定到视图控制器,使用"模型密钥路径"设为searchString。此外,打开"连续更新值"复选框。在您自己的代码中,通过更改searchString属性而不是直接访问文本字段来更新文本字段(您甚至可以摆脱文本字段的出口,因为您可能会赢得&t; t需要它了。由于文本字段中显示的字符串的所有更改现在都将通过searchString属性,因此将始终调用其didSet块,并始终通知您。