2

いくつかの NSButton オブジェクトを含むレイアウトと、テキストのみが選択可能な NSTextField があります。他の NSButton オブジェクトにはキーバインディングが関連付けられており、テキストフィールドでテキストを選択するまでは完全に機能します。そこから、レイアウト内の他のボタンのキー バインディングが機能しなくなります。

SetSelectable:NO と YES を設定しようとするなど、さまざまな解決策を見てきましたが、テキスト フィールドは編集可能でなくてもフォーカスを維持し、すべてのキーストロークを受け取るようです。

テキストフィールドのテキストを選択可能にしたいのですが、他のボタンのいずれかがクリックされた場合、テキストフィールドはキーイベントの受信を停止する必要があります。

何か案は?


これに対する解決策を見つけました。

Macrumors: http://forums.macrumors.com/showthread.php?t=852807

テキストフィールドにフォーカスがあるかどうかを確認する方法を見つけました:

- (BOOL)isTextFieldInFocus:(NSTextField *)textField {
BOOL inFocus = NO;

inFocus = ([[[textField window] firstResponder] isKindOfClass:[NSTextView class]]
           && [[textField window] fieldEditor:NO forObject:nil]!=nil
           && [textField isEqualTo:(id)[(NSTextView *)[[textField window] firstResponder]delegate]]);

return inFocus;
}

次に、すべての NSButton で実行される Update メソッドで、次のように記述しました。

if ([self isTextFieldInFocus:display]) {
    [display setHidden:YES];
    [display setHidden:NO];
}

ここで、display は NSTextField アウトレットの名前です。

これで、テキストを選択してボタンの 1 つを押すと、NSButton のキー バインディングが正常に機能するようになりました。これにより、ユーザーはテキストを選択してコピーできますが、キーストロークを入力するにはボタンを 1 つ押す必要があり、これで問題ないと思います。

4

0 に答える 0