1

私は NSTextFields を使用して、選択と編集を有効/無効にしていますが、サンプル アプリで奇妙な動作に遭遇しました。MyTextField という NSTextField のサブクラスがあります。このサブクラスが行う唯一のことは、次のように、要求されたときにファーストレスポンダーのステータスを拒否することです。

@interface MyTextField : NSTextField
@end

@implementation MyTextField
- (BOOL)acceptsFirstResponder {
    return NO;
}
@end

ただし、このテキスト フィールドのインスタンスを .xib に配置してアプリを起動すると、テキスト フィールドをクリックして編集を開始できます。テキスト フィールドは の戻り値を無視しています-acceptsFirstResponderか?

これを回避/診断するためにいくつかのことを試しました:

  • テキスト フィールドのクラスは、.xib の NSTextField ではなく MyTextField に適切に設定されます。
  • NSLogの前にステートメントを配置するとreturn、期待どおりにコンソールに出力されます
  • に戻るNO-becomeFirstResponder、同じ動作を示します。フィールドを編集できます
  • ビューコントローラーを呼び出す[myTextField setSelectable:NO]と、期待どおりに機能します。フィールドをクリックできなくなりました
    • ただし、 (明示的に呼び出さずに) andNOから戻った場合でも、フィールド内のテキストを選択 (および編集) できます。-isSelectable-isEditable-setSelectable:

何が起きてる?

4

1 に答える 1

2

これについてはよくわかりませんが、ファーストレスポンダーが実際にはテキスト フィールドではなく、特別な (非表示の) テキスト ビュー オブジェクトであるフィールド エディターであるという事実に関係していると思います。説明については、Apple ドキュメントの「Text Editing Programming Guide」の「Working with the field editor」セクションを参照してください。

于 2012-08-27T21:05:16.180 に答える