如何找到NSTextfield的焦点

时间:2011-06-24 08:14:22

标签: objective-c cocoa macos delegates nstextfield

我在找出NSTextfield关注的问题时遇到了问题。

我正在构建一个多语言表单,并且有几个NSTextfield用于数据输入。我必须在数据输入期间更改某些NSTextfields的文本输入源,我需要它自动发生。

现在,我可以像我提到here一样毫无问题地更改文本输入源。

我遇到的问题是在NSTextfield成为焦点后立即更改输入源。如果我使用controlTextDidBeginEditing:委托方法,则在键入第一个字母后更改源输入。 这意味着我丢失了用正确语言输入的第一个单词。

是否有代表才能找到它?

2 个答案:

答案 0 :(得分:0)

您可以继承NSTextField并覆盖- (BOOL)becomeFirstResponderNSResponder)以响应此类事件。

您也可以尝试使用control:textShouldBeginEditing:

答案 1 :(得分:0)

您需要继承NSTextField

Swift 3 +

class FocusingTextField : NSTextField {

    var isFocused : Bool = false

    override func becomeFirstResponder() -> Bool {
        let orig = super.becomeFirstResponder()
        if(orig) { self.isFocused = true }
        return orig
    }

    override func textDidEndEditing(_ notification: Notification) {
        super.textDidEndEditing(notification)
        self.isFocused = false
    }

    override func selectText(_ sender: Any?) {
        super.selectText(sender)
        self.isFocused = true
    }

}
视图控制器中的

self.view.window?.firstResponder会提供NSTextView