これをどうやってViewで表示するか・・・当然Viewにそういうメソッドがあるだろう、ということでデベロッパドキュメントを探す。PDFViewのselection関連のメソッドは
– currentSelection
– setCurrentSelection:
– selectAll:
– clearSelection
– copy:
– scrollSelectionToVisible:
– setCurrentSelection:animate:
– setHighlightedSelections:
– highlightedSelections
・・・そのものずばり、– setHighlightedSelections:が求めるメソッドだった。引数はPDFSelectionの配列だから、findStringの戻り値をそのまま渡せばいい、という簡単さ。
NSArray* seledted=[[pdfView document] findString:[sender stringValue] withOptions:NSCaseInsensitiveSearch]; [pdfView setHighlightedSelections:seledted];これだけでPDFドキュメント内の検索ヒット文字列が全て選択状態になる。便利じゃのお。しかしここままだと、最初の検索ヒット文字列にまでViewが勝手に動いてくれるわけではない。そこで、最初の検索ヒット文字列をcurrentSelectionに指定して、そこまでスクロールするコードを加える。
[pdfView setCurrentSelection:[seledted objectAtIndex:0] ]; [pdfView scrollSelectionToVisible:self];というわけで「検索→すべての検索結果を選択状態→最初の検索ヒット文字列を表示」が実現できた。
さらにsetHighlightedSelections:のドキュメントには「通常の選択文字列とは違う背景色で表示することを勧める」とあるので、選択文字列の背景色を変えてみる。
これはPDFSelectionに「setColor」というメソッドがあったことを覚えていたのでそれを使う。
しかし[[seledted objectAtIndex:0] setColor:[NSColor yellowColor]としてみたら、最初の選択文字列だけ背景色が黄色くなってしまった。全部のPDFSelectionオブジェクトでsetColorする必要があるのか。
ま、
for (PDFSelection* selection in seledted) { [selection setColor:[NSColor yellowColor]]; }と書き加えるだけだから簡単なんだけど。
これで次のように表示できるようになった。
ふむふむ、次はサイドビューを表示できるようにして、そこで検索がヒットしたページを並べる、という処理かなあ。プレビュー.appに準ずるくらいの機能をつけられたいいな、と思っている。できるかな。
0 件のコメント:
コメントを投稿