2017-09-25 56 views
0

清除事件我有一个视图控制器与链接到一个IBAction为一个NSButton假设perform()。该按钮与返回键相同。 不过返回键也被用在了其他临时措施。在没有涉及到以前的视图控制器的其他文件,我有一个的NSTextField这是可编辑的,所以返回键将验证文本更改。如何在斯威夫特

我想验证我的文字兵不血刃perform()从功能等效键按钮调用。

目前我发现的唯一解决方案是发送通知textIsBeingEditing当我的文本字段成为FirstResponder和其他代理函数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(),但我完全不知道如何使用它

+0

继续[在Swift中取消键盘事件](https://stackoverflow.com/questions/46401695/cancel-key-event-in-swift?noredirect=1#comment79769275_46401695) – Willeke

回答

0

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

+0

是的,我这样做。但按钮事件'进行()'仍然是所谓不幸... – DEADBEEF

+0

这是默认和默认按钮的预期行为。当按钮应该抓住钥匙时,哪个控件被聚焦? – Willeke

+0

集中控制应该是'NSTextfiled',但我看到当我在'NSTextField'上拼写时,函数'becomeFirstResponder'被调用并且紧随其后(即没有做任何事情),函数'resignFirstRespoinder'也被调用。这是正常的吗? – DEADBEEF