새 프로그램의 소스 목록을 만들려고하고 있는데 뷰 기반 NSOutlineView를 사용하여 약간의 문제가 있습니다. 내 코드는 셀 기반 NSOutlineView를 사용하여 잘 작동하므로 어떤 일이 일어나고 있는지 혼란 스럽다. 내가 디버거를 통해이 프로그램을 실행할 때이 outlineView:objectValueForTableColumn:byItem:
이 실행되지 않는 것을 볼 수outlineView : objectValueForTableColumn : byItem : not called
#pragma mark -
#pragma mark NSOutlineView Delegate
- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item {
return (item == nil) ? YES : [(SourceListNode *)item groupItem];
}
- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
if ([(SourceListNode *)item groupItem]) {
return [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
else {
return [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}
}
#pragma mark -
#pragma mark NSOutlineView Data Source
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
return (item == nil) ? [sourceListNodes count] : [(SourceListNode *)item numberOfChildren];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return (item == nil) ? YES : ([(SourceListNode *)item numberOfChildren] > 0);
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
return (item == nil) ? [sourceListNodes objectAtIndex:index] : [(SourceListNode *)item childAtIndex:index];
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return [(SourceListNode *)item name];
}
:
여기 대리인 및 데이터 소스에 대한 내 코드입니다. 결과는 텍스트가없는 개요보기입니다. 정확한 세포가 만들어졌고 그들을 선택하고 확장 할 수 있습니다. 내가 뭘 놓치고 있니?
업데이트 : IB에서 내 소스 목록을 삭제하고 새 목록을 추가 한 다음 컨트롤러 개체에 연결했습니다. 결과는 좋았지 만 머리글 셀의 텍스트는 "HEADER CELL"이고 자식 셀의 텍스트는 "Table View Cell"이었습니다.
디버거를 통해 프로그램을 다시 실행했으며 이번에는 outlineView:objectValueForTableColumn:byItem:
이 실행되었습니다. 그것은 세포의 텍스트를 채우지 않았다. 다음과 같이
그때 outlineView:viewForTableColumn:item:
업데이트 : 예상대로
- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
NSTableCellView *result;
if ([(SourceListNode *)item groupItem]) {
result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
else {
result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}
[[result textField] setStringValue:[(SourceListNode *)item name]];
return result;
}
이제 모든 것이 작동합니다.
간단히 말해서, 나는 나의 문제를 해결했다. 그러나 나는 이제 또 다른 질문을 가지고있다. 보기 기반 개요보기에 outlineView:objectValueForTableColumn:byItem:
의 목적은 무엇입니까? 실행되지만 아무 것도 보이지 않습니다.
안녕하세요 John, 왜 objectValueForTableColumn이 뷰 기반 개요보기에 필요한지 알아 냈습니까? 나도 똑같은 것을 궁금해. – Indoor