1

Cocoa アプリに、キーボードから制御できるようにしたい NSSegmentedControl を含むフォームがあります。ただし、NSSegmentedControl はファーストレスポンダーになることを非常に嫌がっているようです。

ウィンドウの最初のファーストレスポンダーをセグメント化されたコントロールに設定しても、何も起こりません。ウィンドウが最初に読み込まれたときに、キーボード フォーカスがありません。ただし、次のようにファーストレスポンダーを手動で設定すると、フォーカスを受け取ります。

[segmentedControl.window makeFirstResponder: segmentedControl];

フォームの唯一の部分がセグメント化されたコントロールである場合、これはうまく機能します。別のフィールド (NSTextField など) を追加し、セグメント化されたコントロールの nextResponder をそのフィールドに設定すると、セグメント化されたコントロールはファーストレスポンダーにはなりません。フォーカスはすぐにテキスト フィールドに移動し、タブを押してセグメント化されたコントロールに戻ることはできません。

NSSegmentedControl をサブクラス化し、acceptsFirstResponder、becomeFirstResponder などをオーバーライドしようとしましたが、役に立ちませんでした。違いを生むのはresignFirstResponderだけです。そのメソッドからNOを返すと、セグメント化されたコントロールは実際にフォーカスを保持しますが、常にフォーカスを保持したくないことは明らかです。

コントロールを通常のレスポンダーのように動作させる方法についてのアイデアはありますか?

4

1 に答える 1

0

意図したとおりに動作しています。すべてのコントロールが「キー ビュー ループ」に参加するわけではありません。フル キーボード ナビゲーションは、すべてのアプリのシステム環境設定でユニバーサル アクセスを介して有効にされており、個々のアプリが独自に実装することはできません。

重いキーボード入力を目的としたフォームでは、セグメント化されたコントロールを使用しないことをお勧めします。NSPopUpButton は、私たちが Web フォームで期待するものとより密接に機能するため、アプリの UI で必ずしも間違った選択をしているわけではありません。

あなたが尋ねた質問に正確に答えるのではなく(他の誰かができる)、少しきれいなUI要素を犠牲にして機能性の面で選択することを謙虚に提案します。 .

于 2012-05-28T02:29:30.687 に答える