我有NSOutlineView
绑定到NSTreeController
。
在“接口”构建器中,我已使用Controller键“NSOutlineView
”将每个arrangedObjects
列绑定到树控制器,并将模型键路径作为实体属性或实体类中的方法。
现在除了一个特殊列之外,所有其他列的排序都很完美。特殊列具有绑定到我的Entity类中声明的方法的模型键路径。此方法取决于我的代码中的某些条件,将返回NSString
或NSDictionary
。
当它返回NSDictionary
时,委托方法:
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
解析NSDictionary
并返回该单元格的double值。另请注意,此案例中的单元格派生自NSCell
并显示进度条。
简而言之,我的特殊列将根据情况显示进度条和字符串的混合。
我想实现排序,以便所有进度条保持在一起,字符串按字母顺序排序。
答案 0 :(得分:0)
如果您尝试将table column's sort descriptor设置为您使用比较器查看对象类的描述符,那么您可能会有一些运气。 (您也可以尝试使用“class”键填写IB中的“Sort Key”,但我认为这可能不太可能起作用......)
答案 1 :(得分:0)
我自己找到了解决方案,并在发布查询后仅2分钟:)解决方案是在IB中添加自定义排序键,并在我的Entity类中定义一个返回NSInteger的键名方法。因为我希望所有NSDictionary对象保持在一起并且所有NSStrings都要排序,所以我根据对象类型返回适当的整数。 请注意,任何可能因排序无法工作的人:确保在IB中启用了对sortDescriptor的绑定。
答案 2 :(得分:0)
试
NSSortDescriptor *sorter = [[[NSSortDescriptor alloc]
initWithKey:NULL
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
[[myOutlineView tableColumnWithIdentifier:@"Name"]setSortDescriptorPrototype:sorter];