1

アプリ デリゲートからウィンドウを作成し、その contentView を plist 仕様からプログラムで生成されたビューに設定します。次に、ウィンドウを前面に移動します。ウィンドウにはツールバーがあり、ツールバーのボタンを押すと、別の contentView が表示されるはずです。

最初のコンテンツ ビューは、最上位のテキスト フィールド サブビューがファーストレスポンダーとして既に選択された状態で表示されますが、ビューをツールバーから (ウィンドウに contentView を設定する) 別のビューに変更すると、そのビューのテキスト フィールドが選択されません。最初の返信者。

一貫性を保ちたいので、理想的には、コントロールをファーストレスポンダーとして自動選択しないか、常にコントロールをファーストレスポンダーとして自動選択しますが、どのプロセスがコントロールをファーストレスポンダーにしているのかよくわかりません最初の場所。

ビューを切り替えるときにそれを防ぐか、エミュレートしようとすることができるので、誰かがその原因を説明してもらえますか?

4

2 に答える 2

3

hussain Shabbir の答えは正しい軌道に乗っていますが、いくつかの点が欠けています。

まず、ウィンドウの最初のファーストレスポンダーを設定してから、同じビューをファーストレスポンダーにすることは冗長です。最初のポイントは、2番目を引き起こすことです。

次に、ウィンドウを表示する前に、ウィンドウの最初のファーストレスポンダーを設定する必要があります。

ウィンドウが最初に画面上に配置されたときに、特定のビューをファーストレスポンダ (キー ビューとも呼ばれます) として設定します。

最初のファーストレスポンダを設定したときにウィンドウがすでに表示されている場合は、何も起こりません。

ウィンドウを初めて表示する前に、最初のファーストレスポンダーを設定する必要があります。

それを行うのに最適な場所はコードではなく、ペン先です。

ウィンドウのイニシャル ファースト レスポンダー アウトレットからビューに接続をドラッグするだけです。

その場合、これらのコード行はどちらもありません。

さらに良いことに:

ウィンドウにはツールバーがあり、ツールバーのボタンを押すと、別の contentView が表示されるはずです。

NSTabView の使用を検討しましたか? これは自動的に処理されます (すべてのタブ ビュー アイテムには、独自の初期ファーストレスポンダー アウトレットがあります)。

于 2013-09-16T14:11:27.140 に答える
1

異なるビューをクリックしたときに必要な場合は、テキストフィールドをファーストレスポンダーにする必要があります。次に、以下の 2 行のコードが機能するはずです:- ここでは、条件に基づいて以下の行を使用します:-

[[self window] setInitialFirstResponder:(NSView *)YourTextFieldName];
[[self window] makeFirstResponder:(NSView *)YourTextFieldName];
于 2013-09-16T11:32:05.213 に答える