Как обновить значения строки и дочерние элементы, когда строка в виде структуры расширяется при каждом нажатии - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в цели c.И я искал примеры / ответы, которые описывают расширение представлений схемы представления.Теперь я пытаюсь пометить все элементы как расширяемые.Теперь, когда пользователь щелкает, чтобы развернуть элемент, он вызывает API, вставляет его дочерние элементы, если они есть, и затем повторно загружает табличное представление.Код приведен ниже:

 - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item{
//initially make all items expandable to check and load data later on
            return YES;
    }

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item{    
    if (item == nil) {     
        return RootLists.count;
    }
    if ([item isKindOfClass:[NSDictionary class]]) {
        reloadCheck=true;
        return [[item objectForKey:@"children"] count];
    }
    return 0;
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item{

    if (item == nil){       
        return [RootLists objectAtIndex:index];
    }
    if ([item isKindOfClass:[NSDictionary class]]) {
        return [[item objectForKey:@"children"] objectAtIndex:index];
    }
    return nil;
}


-(NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item{
    NSView *rowView;
    rowView=[[NSView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];
    [rowView setWantsLayer:YES];   
     NSTextField *textField;        
    [textField setMaximumNumberOfLines:1];
    [textField setStringValue:[item valueForKey:@"Name"]];       
    [textField setBezeled:NO];
    [textField setDrawsBackground:NO];
    [textField setEditable:NO];
    [textField setSelectable:NO];  
    [rowView addSubview:textField];
    return rowView;
}



    - (BOOL)outlineView:(NSOutlineView *)outlineView  shouldExpandItem:(id)item{
                NSMutableArray *getchildrenlist=[database GetData:[item valueForKey:@"id"]];    
                if (getchildrenlist.count>0) {
//If children are already present then return 1
        return 1;
                }
                else
                {
//If children are not present then hit API, get children online and then reload the view with children
                    dispatch_group_t DispatchGroup = dispatch_group_create();
                    dispatch_group_enter(DispatchGroup);
                    [self ExpandDataApi:1 FolderId:[item valueForKey:@"id"] DispatchGroup:DispatchGroup];              
                    dispatch_group_notify(DispatchGroup,dispatch_get_main_queue(),^{
                                [self reloadData:item];
                                [self->_Outline_View reloadData];
    });
        return 1;
                }

            }

Теперь проблема в том, что таблица перезагружается после каждого клика, но никогда не расширяет ее, добавляя новых дочерних элементов в строку.Вместо этого он сворачивает все предметы.Но после повторного щелчка (дважды щелкнул один и тот же элемент), элемент расширяется правильно с новыми дочерними элементами.Я хочу: перезагрузить таблицу и расширить эту строку новыми дочерними элементами после получения новых значений.

1 Ответ

0 голосов
/ 16 апреля 2019

Мне удалось добавить элементы для просмотра с помощью следующего кода

[self->_Outline_View insertItemsAtIndexes:[NSIndexSet indexSetWithIndex:row] inParent:item withAnimation:NSTableViewAnimationSlideDown];

и удалить элемент из строки по коду:

  [self->_Outline_View removeItemsAtIndexes:[NSIndexSet indexSetWithIndex:row] inParent:item withAnimation:NSTableViewAnimationSlideDown];

, а затем обновить его с помощью кода:

[self->_Outline_View reloadItem:item];
  [self->_Outline_View expandItem:item];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...