2009年6月8日月曜日

cocoa: NSOutlineView

NSOutlineView で最低限実装しなければならないメソッドは4つ。

outlineView:numberOfChildrenOfItem:
item の下にぶらさがる 子item の数を返す。
outlineView:isItemExpandable:
子item のある/なし
outlineview:child:ofItem
子item を返す。index は 0 から始まり、numberOfChildren だけコールされる。
outlineView:objectValueForTableColumn:byItem:
item に対応する表示を返す。 ここを僕は勘違いしていて、item は識別子なんですね。item != 表示。
で、作ってみました。 なんとなく分かった気がする。
#import <cocoa.h>

@interface DataSource : NSObject {
    IBOutlet NSOutlineView *outlineView;
}

@end
#import "DataSource.h"

@implementation DataSource
// Data Source methods

- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
NSLog(@"[numberOfChildrenOfItem] item:%@", item);
   return (item == nil) ? 2 : 2;
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
NSLog(@"[isItemExpandable] item:%@", item);
    return ([item length] == 6) ? YES : NO;
}


- (id)outlineView:(NSOutlineView *)outlineView
  child:(int)index
    ofItem:(id)item
{
    NSLog(@"[child ofItem] index:%d item:%@", index, item);
    if (item == nil) {
        NSString *string = [[NSString alloc] initWithFormat:@"root-%d", index];
        return string;
    } else {
        NSString *string = [[NSString alloc] initWithFormat:@"%@-%d", item, index];
        return string;
    }
}

- (id)outlineView:(NSOutlineView *)outlineView
objectValueForTableColumn:(NSTableColumn *)tableColumn
    byItem:(id)item
{
     NSLog(@"[objectValueForTableColumnd]  item:%@", item);
     return (item == nil) ? @"/" : @"fuga/";
}

@end
Blogger Syntax Highliter は Objective-C に対応してないのね。がっくし。

0 件のコメント:

コメントを投稿