Я новичок в цели 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;
}
}
Теперь проблема в том, что таблица перезагружается после каждого клика, но никогда не расширяет ее, добавляя новых дочерних элементов в строку.Вместо этого он сворачивает все предметы.Но после повторного щелчка (дважды щелкнул один и тот же элемент), элемент расширяется правильно с новыми дочерними элементами.Я хочу: перезагрузить таблицу и расширить эту строку новыми дочерними элементами после получения новых значений.