- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试为新程序创建源列表,但在使用基于 View 的 NSOutlineView 时遇到了一些小问题。我的代码使用基于单元格的 NSOutlineView 工作正常,所以我对发生的事情有点困惑。
这是我的委托(delegate)和数据源代码:
#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];
}
当我通过调试器运行它时,它看到 outlineView:objectValueForTableColumn:byItem:
没有执行。结果是没有文本的大纲 View 。创建了正确的单元格,我可以选择它们并展开它们。我错过了什么?
更新:我删除了 IB 中的源列表,添加了一个新列表,并将其连接到我的 Controller 对象。结果更好,但标题单元格的文本为“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:
用于基于 View 的大纲 View 的目的是什么?它执行,但似乎没有做任何事情。
最佳答案
基于 View 与基于单元格略有不同。
所有不同之处在于将“id”返回值替换为“NSView”。
改变这个:
- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
对此:
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
假设您正在运行 10.7,并且您实际上打算返回一个 NSView。
关于objective-c - 大纲 View :objectValueForTableColumn:byItem: not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8763417/
我想不使用 Cocoa 绑定(bind)来实现大纲 View 。 我查看了this tutorial其中有一些,但没有一个使用数据源方法 optional func outlineView(_ out
我正在尝试为新程序创建源列表,但在使用基于 View 的 NSOutlineView 时遇到了一些小问题。我的代码使用基于单元格的 NSOutlineView 工作正常,所以我对发生的事情有点困惑。
我是一名优秀的程序员,十分优秀!