我有一个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/