如何在按下Enter键时使NSTextfield失去焦点?

时间:2014-04-01 22:34:27

标签: objective-c xcode macos nstextfield

我想创建一个文本字段,如果我单击它,或按Enter键,它会失去焦点。因为在焦点环消失。我已经看过这样的情况,但我不知道在哪里放置代码。任何人都可以告诉我如何让NSTextfield失去它的焦点吗?

2 个答案:

答案 0 :(得分:1)

一种方法是实现NSTextFieldDelegate,将委托分配给您的文本字段,并让它调用一个选择器(代码中的一个方法更改使第一个响应者= nil)。当文本字段完成接收输入时,将使用消息调用委托。有关更多信息,请查看API:

https://developer.apple.com/library/mac/documentation/cocoa/reference/NSTextFieldDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSTextFieldDelegate

答案 1 :(得分:1)

对于像我这样懒惰的人,这里有一些代码。

这是我使用的简化的NSTextfieldDelegate方法:

func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
    DispatchQueue.main.async {
        self.textField2.window?.makeFirstResponder(nil)
    }
    return true
}

https://developer.apple.com/documentation/appkit/nstextview/1807135-resignfirstresponder?language=objc

resignFirstResponder Docu说:

使用NSWindow方法makeFirstResponder:而非此方法 文本查看第一响应者。永远不要直接调用此方法。

// don't use this as the name may suggest (at least it did for me)
self.textField2.resignFirstResponder()