2010-12-13 12 views
4

私は自分のテキストフィールドが最初のレスポンダを辞めるようにしようとしています。デリゲートメソッドが呼び出されていますが、私が現在行っていることはうまくいかず、これを行う正しい方法は何ですか?NSTextFieldが最初のレスポンダーを辞任

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor 
{ 
    [fieldEditor resignFirstResponder]; 
    return YES; 
} 

答えて

17

この方法ではなく、NSWindow makeFirstResponder: メソッドを使用して、 を作成します。最初のレスポンダーを出す。決して このメソッドを直接呼び出すことはできません。

このコードは、それを行う必要があります。

[myWindow makeFirstResponder:nil]; 
+0

ではなく、iOSに属するすべてのクラスがosx sdkで始まらないクラッシュが発生していますが、別の問題だと思っています。ありがとうございました。 – avizzini

+0

問題は間違いなく他の場所です。これは、* nothing *をウィンドウの最初のレスポンダにする適切な方法です。 –

+0

私はこれを呼び出すと、ウィンドウがコントロールコントロール:textShouldEndEditing:を要求する無限ループを引き起こします。これはmakeFirstResponder:ad infinitumを呼び出します。 – SG1

-4

私はまだiPhoneプログラミングには専門家でないが、あなたが実装する必要があるメソッドは「textFieldShouldReturn」は、このように実装されています-resignFirstResponder法上のドキュメントから

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
}

+1

多分私はiPhoneアプリケーションのためではなく、もっと明確にすべきでした。あなたが示したメソッドは、Cocoa Touch用のUITextFieldデリゲート用です。 – avizzini

+0

OSX – damithH

0

を私はあなたがNSControlデリゲートメソッドを探していると信じて:

- (void)controlTextDidEndEditing:(NSNotification *)notif 

(簡単IBで設定)ごNSTextFieldデリゲートでこのメソッドを実装します。

次に、このような

[self.window selectNextKeyView:self] 

として、レスポンダを変更するには、あなたの要求は動作するはずです。

5
- (void)controlTextDidEndEditing:(NSNotification *)obj { 

    [self.window makeFirstResponder:view]; 
} 

ここで、 "view"はNSTextViewコントロールの親NSViewです。

+0

これは正しいものです。そしてそれはシートのために働く –

関連する問題