-1

NSOutlineViewを実装しており、次のメソッドを実装しています。

    -(void) initOutlineView{

        pMyOutlineView       = [[[MyUICustomOutlineView alloc] initWithFrame:clipViewBounds]          
                                autorelease];

    NSTableColumn*  firstColumn     = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];
    [firstColumn setWidth:25];
    [pMyOutlineView  addTableColumn:firstColumn];

    NSTableColumn*  secondColumn        = [[[NSTableColumn alloc] initWithIdentifier:@"secondColumn"] autorelease];
        NSTextFieldCell *pCell = [[NSTextFieldCell alloc]init];

        [secondColumn setDataCell:pCell];
        [secondColumn setWidth:180];

        [pMyOutlineView  addTableColumn:secondColumn];
        [pMyOutlineView setRowHeight:30];


        pNodeArray = [[NSMutableArray alloc]initWithCapacity:10];

        PointerNode *pNode = pointerList.getHead();

        int idx =0;
        void *ptr = nil;
        while ( contact ) {
            [pNodeArray insertObject:[NSValue valueWithPointer:(void *)pNode] 
                atIndex:idx];
            pNode = pNode->getNext();
            idx++;

        }

        [pMyOutlineView setDataSource:self];
        // this is to tell myCustomOutlineView to delegate Menu and Mouse event to 
        // this interface
        [pMyOutlineView setDataDelegate:self];
        [scrollView setDocumentView:pMyOutlineView];

        [pMyOutlineView setDelegate:self];


}

そして、次のデリゲートメソッドを実装しました

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {

        // Here it will come for the top level element 
    if(item==nil) 
        return pointerList.size();

    /* 
     If its not NULL then it must be some child element 
     */
    if([item isKindOfClass:[NSValue class]])
    {
                // yes it may have children 
        PointerNode *pNode = (PointerNode *)[item pointerValue];
        if(pNode->hasChildren()){
            return pNode->getNoOfChild();
        } 
    }
    return 0; // means this element not going to have any children 
}

他の方法

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item

データを取得します

私はいくつかのブログ、チュートリアルをフォローしています、私が直面している問題は、パードキュメントとして、そのアイテムの子の数を計算して送信する必要がある各要素のnumberOfChildrenOfItemでヒットする必要がありますが、私が直面している問題は、上記の関数に一度だけ来ると、その項目もnilです。つまり、他の要素には来ません。委任する必要のあるメソッドがありませんか。

私がオーバーライドする他の方法は以下の通りです、

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item

- (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item

教えてください、私が欠けている方法はどれですか

4

2 に答える 2

3

outlineView:numberOfChildrenOfItem:、アイテムがそうであるかどうかをテストする必要がnilあり、そうである場合は、最上位オブジェクトの子の数を返します。ドキュメントを引用して、

itemがの場合nil、このメソッドは最上位アイテムの子の数を返す必要があります。

0アイテムがであるときに戻る場合nil、アウトラインビューは、最上位のアイテムの子がないと見なすため、このメッセージをデータソースオブジェクトに再度送信することはありません。

于 2011-01-29T09:13:15.450 に答える
0

@Rohanはデータソースメソッドを実装しましたか?

NSOutlineViewのドキュメントを確認してください

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSOutlineView_Class/Reference/Reference.html

于 2011-01-29T09:04:01.720 に答える