textchange 上的 Swift macOS 通知

标签 swift macos nsnotification

在我的 NSViewController 中,我有一个 NSTexField,它会在每次内容更改时触发通知。

我还有几个按钮,它们定义了 IBAction 以将字符写入 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))
}

最佳答案

由于这是一个 Mac 应用程序,您可以通过使用 Cocoa Bindings 来填充文本字段来简化此过程。只需使用 didSet block 在 View Controller 上声明一个 dynamic 属性,如下所示:

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

然后,在 Interface Builder 的绑定(bind)检查器中,将文本字段的 Value 绑定(bind)绑定(bind)到 View Controller ,并将“Model Key Path”设置为 searchString。此外,选中“持续更新值”复选框。在您自己的代码中,通过更改 searchString 属性而不是直接访问文本字段来更新文本字段(您甚至可以摆脱文本字段的导出,因为您可能不会'不再需要它了)。由于文本字段中显示的字符串的所有更改现在都将通过 searchString 属性,因此将始终调用其 didSet block ,并且您将始终收到通知。

关于textchange 上的 Swift macOS 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46104062/

相关文章:

swift - 在不存储单个值的情况下计算平均值的方法

java - 如何检测Unix终端字符编码?

ios - 预定的 NSNotification(而不是 UILocalNotification)... Swift 解决方案?

ios - NotificationCenter 在 Swift 3.1 中返回 batteryLevel 和 batteryState 的正确语法是什么

swift - Firebase 在调用下一个方法之前没有完成

ios - 派生数据中生成的未知文件夹

java - Mac OSX Java 终端版本不正确

ios - 如果我从另一个已经显示键盘的 View Controller 转换过来,如何检测当前是否显示键盘?

ios 9 objective-c 屏幕尺寸问题

mysql - 在 Mac 上使用 mysql.sock.lock 启动 mysql 时遇到问题