Проблема NSOutlineView с дочерним / родительским элементом - PullRequest
0 голосов
/ 29 января 2011

Я реализую 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 для каждого элемента, где нам нужно вычислить и отправить номер дочернего элемента для этого элемента но проблема, с которой я сталкиваюсь, состоит в том, что вышедшая выше функция функционирует только один раз, и для этого элемента тоже ноль, то есть она не подходит для другого элемента, Я пропускаю какой-либо метод, который должен быть делегирован

другой метод, который я переопределяю, как показано ниже,

- (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

Пожалуйста, скажите мне, какой метод мне не хватает

Ответы [ 2 ]

3 голосов
/ 29 января 2011

В outlineView:numberOfChildrenOfItem: необходимо проверить, является ли элемент nil, и, если это так, вернуть количество дочерних элементов объекта верхнего уровня.Цитируя документацию ,

Если item равен nil, этот метод должен возвращать число дочерних элементов для элемента верхнего уровня.

Если вы возвращаете 0, когда элемент равен nil, представление структуры считает, что нет дочерних элементов для элемента верхнего уровня, поэтому оно не будет отправлять это сообщение снова вашему объекту источника данных.

0 голосов
/ 29 января 2011

@ Рохан, ты реализовал методы источника данных или нет.

Ознакомьтесь с документацией для NSOutlineView

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

...