2011-06-24 42 views
4

我在找出哪個NSTextfield是關注的問題。如何找到哪個NSTextfield專注於

我正在構建一個多語言表單,並且有幾個NSTextfield用於數據輸入。在數據輸入期間,我必須更改一些NSTextfields的文本輸入源,並且我需要它自動發生。

現在,我可以改變文本輸入源,因爲我提到here沒有問題。

我的問題是當NSTextfield成爲焦點時更改輸入源。如果我使用controlTextDidBeginEditing:委託方法,它會在輸入第一個字母后更改源輸入。 這意味着我失去了輸入正確語言的第一個單詞。

是否有任何代表可以找到它?

回答

0

您可以繼承您的NSTextField並覆蓋- (BOOL)becomeFirstResponderNSResponder)以響應此類事件。

您也可以嘗試使用control:textShouldBeginEditing:

+0

@AliSoftware,不,對不起,我的朋友,但'控制: textShouldBeginEditing'與'controlTextDidBeginEditing:'方法類似!兩者都不適合我! 我需要在輸入任何內容之前更改**輸入源**(在選擇文本域之後),並且在開始輸入後兩種方法都會更改**輸入源**。這意味着我將失去第一封信(正如我)。 – Prooshani

+0

@AliSoftware,並且在Mac OSx 10.0到Mac OSx 10.4中也可以成爲FirstFoundResponder,我正在使用Mac OSx 10.6。 – Prooshani

+0

'becomeFirstResponder'從10.0開始可用,並且從未從API中刪除,所以它仍然可用於10.6(希望!!)。請參閱[documentation](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html)。我只是在一個只有10.6的項目上自己嘗試過,以證實這一點,它的作用就像一個魅力。 – AliSoftware

0

您將需要繼承NSTextField

斯威夫特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