3

カスタムサブクラスのすべてのNSTextFinderClient呼び出しをキャプチャしようとしています。NSTextView

showアクションは-(void)performTextFinderAction:(id)senderオーバーライドで呼び出されますが、次を検索、前を検索などの場合は呼び出されません。

何か案は?

ありがとう!

編集:

新しいプロジェクトを作成し、NSTextViewインターフェイスビルダーからドラッグした場合、検索バーがファーストレスポンダーの場合、command-gとcommand-shift-g(次を検索して前を検索)は機能しません。

どうしてこれなの?

NSTextViewすべてのイベントの検索バーに応答するには、のカスタムサブクラスが必要です。

4

2 に答える 2

3

Apple の TextEdit のソース コードを検索したのは、TextEdit では、検索フィールドがファーストレスポンダーであっても、テキスト ビュー内の標準の検索バーが command-G (およびその他のショートカット) に対して正常に機能するためです。

解決策を見つけました。

メイン メニューのペン先に移動し、[検索] (および関連する) メニュー項目を選択します。これらは、「performFindPanelAction:」というデフォルト アクションにバインドする必要があります。それらをアンバインドし、代わりに First Responder の「performTextFinderAction:」にバインドします。

First Responder のアクション リストにそのアクションが見つからない場合があります。そのため、First Responder の属性インスペクター ペインに自分で追加する必要があります。

これは、以下の文書が意味していた

OS X v10.7 より前では、これらのメニュー項目のデフォルト アクションは performFindPanelAction: でした。可能な限り、この新しいアクションを使用するように実装を更新する必要があります。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/#//apple_ref/occ/instm/NSResponder/performTextFinderAction :

于 2015-10-21T11:00:39.513 に答える
2

検索バーは、NSResponder の -performTextFinderAction: を呼び出す代わりに、クライアントの NSTextFinder とプライベートに通信します。これは、クライアント以外の何かが重要なフォーカスを持っている場合に find を機能させるために必要です。

何を達成しようとしていますか?

于 2011-08-26T01:16:38.660 に答える