2011年3月28日月曜日

PDFkit 検索(5) NSTableView

というわけで平日のほうが時間が限られている分、集中できるかも。因果な性格だなー。

NSTableViewをサイドパネルに表示できるようにした。

データソース関係はこんな感じ。
-(NSUInteger)numberOfRowsInTableView:(NSTableView*)aTableView{
    
    return ([searchResults count]);
}
-(id)tableView:(NSTableView*)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    
    if([[tableColumn identifier] isEqualToString:@"page"])
        return ([[[[searchResults objectAtIndex:row]pages] objectAtIndex:0] label]);
    else if ([[tableColumn identifier] isEqualToString:@"selection"]){
        NSString *label=[[[pdfView document] outlineItemForSelection:[searchResults objectAtIndex:row]] label];
        return label;
    }
    else 
        return NULL;
}

デリゲートメソッドはこうなった。

- (void) tableViewSelectionDidChange: (NSNotification *) notification{
    NSInteger rowIndex;
    
    // What was selected.  Skip out if the row has not changed.
    rowIndex = [(NSTableView *)[notification object] selectedRow];// 1
    if (rowIndex >= 0)
    {
        [pdfView setCurrentSelection: // 2
        [searchResults objectAtIndex: rowIndex] animate:YES];
        [pdfView scrollSelectionToVisible: self];// 3
    }

}

ほとんどデベロッパドキュメントの「Introduction to PDF Kit Programming Guide」にあった通りというかコピペというか。

これで無事にNSTableViewに検索結果を表示できるわけだが・・・


なぜスクロールバーが出てこないんだろう(^^;)ヘッダ行も表示されていない。表示はされていないけれど、↑キーとかを押すとちゃんと動作するので、

[[pdfView document] findString:[sender stringValue] withOptions:NSCaseInsensitiveSearch];

とやっているのが悪いのかも。デベロッパドキュメントの通り、beginFindString:withOptions:を使ったほうがいいのかな。これは明日以降だな。

0 件のコメント:

コメントを投稿