我有一个ViewController,它的NSButton链接到IBAction,比如说perform()。该按钮等效于返回键。
但是,返回键也用于其他临时操作。在另一个与以前的ViewController不相关的文件中,我有一个可编辑的NSTextfield,因此返回键将验证文本更改。

我想验证我的文本,而不触发从等效键中调用的perform()函数。

目前,我找到的唯一解决方案是当我的文本字段变为FirstResponder时发送通知textIsBeingEditing,而当委托函数controlTextDidEndEditing时发送通知。

这是我的通知选择器:

@objc func trackNameIsBeingEditedNotification(_ notification: Notification) {
    guard let value = notification.userInfo?["trackNameIsBeingEdited"]
      as? Bool else {
        return
    }

    if value {
      backButton.keyEquivalent = ""
      backButton.action = nil
    } else {
      myButton.keyEquivalent = "\r"
      myButton.action = #selector(self.perform(_:))
      // Here the `perform()` function is fired but I would avoid this behaviour…
    }
}


为了防止在我设置perform()后立即触发myButton.action = #selector(self.perform(_:)),是否有任何取消键事件的方法?
我看到了一个名为flushBufferedKeyEvents()的函数,但我完全不知道如何使用它

最佳答案

不要使用通知,请使用委托方法optional func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool验证文本字段的值。

关于objective-c - 如何在Swift中清除事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46408413/

10-11 19:45