2011-01-29 3 views
-1

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

другой метод, который я переопределяю,

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

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

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

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

+0

Здравствуйте, Большое спасибо, у меня не было одного метода реализации, который является - (void) isGroupItem, поэтому он не был установлен как элемент группы – Amitg2k12

Смежные вопросы