1

MacOs アプリケーションを開発しており、カスタム インターフェイスのために独自の検索機能を実装する必要があります。

問題は、NSTextView の NSAttributedString の一部の周りに境界線を描画して検索結果を表示するにはどうすればよいか (TextEdit アプリでどのように行われるか) です。添付の画像で希望の外観を確認してください。

http://d.pr/i/w8wP

[アップデート]

カスタム インターフェイスの要件により、NSTextViewssetUsesFindBar:setUsesFindPanel:. インターフェイスにはカスタム NSSearchField があり、textView で検索を実行する必要があります。

に慣れましたがperformTextFinderAction:、NSSearchField 値を使用して textView でトリガーするにはどうすればよいですか?

4

2 に答える 2

2

NSTextViewオブジェクト(名前は)がすべてを実行するため、実行したいことに対してIBや検索操作を使用する必要はありませんmyTextView。最初に強調表示する文字の範囲を作成してから、それを実行するように指示myTextViewする必要があります。

NSRange charRange = NSMakeRange( location length );   // whatever you want
[myTextView showFindIndicatorForRange:charRange];

選択範囲が範囲内にある場合は、NSScrollViewこの選択範囲を表示する必要があります。電話をかける前にこれを行ってください-showFindIndicatorForRange(下のドキュメントを参照NSTextView):

NSLayoutManager *layout = [myTextView layoutManager];
NSRect rect = [layout boundingRectForGlyphRange:charRange
                                inTextContainer:[myTextView textContainer] ];
[myTextView scrollRectToVisible:rect];

そして今、あなたが望むだけ多くのハイライトされた文字列を表示するための拡張機能。すべての文字を素数の位置にマークしたいとします。(それが何に役立つのかわかりませんが、なぜそうではありませんか?)対応する範囲でNSArrayを作成します:(擬似コード!、範囲はNSValuesである必要があります!)

allRanges = { (1,1) (2,1) (3,1) (5,1) (7,1) etc.}

すべてを一緒に選択できるようになりました。

[myTextView setSelectedRanges:allRanges];
// select the 3th (zero based) entry
[showFindIndicatorForRange:[allRanges objectAtIndex:3];

これは検索メカニズム内で使用されますが、検索プロセスを使用しなくても機能します。

于 2013-01-30T18:20:31.333 に答える
0

インターフェイスビルダーでは、「検索」プロパティを設定して、組み込みの検索/置換バーが表示される場所を制御できます。コードで検索アクションを実行するperformFindPanelAction:には、NSTextView で呼び出します。

于 2013-01-30T16:08:54.360 に答える