我更改了 NSTableView 列的排序描述符。新的描述符非常棒,但现在所有标题都显示了排序箭头。
为什么?如何保留属于我当前排序依据的列的标题的排序箭头?这是代码(旧描述符被注释掉):
//Old descriptor
//NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:metadata.columnSortKeyPath ascending:NO selector:metadata.columnSortSelector];
//New descriptor
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 isKindOfClass:[CBFolder class]]) {
return NSOrderedSame;
}
if (currentClickedHeaderTableColumn) {
CBTableColumnMetadata metadata = [(CBApplicationDelegate*)[NSApp delegate] tableColumnMetadataForKey:currentClickedHeaderTableColumn.identifier];
return [[obj1 valueForKey:metadata.columnSortKeyPath] performSelector:metadata.columnSortSelector withObject:[obj2 valueForKey:metadata.columnSortKeyPath]];
}
return NSOrderedSame;
}];
最佳答案
我相信它的工作原理是 TableView 有它的 sortDescriptors
属性,它是有效的排序描述符数组(主要、次要等)。
如果列的 sortDescriptorPrototype
与 TableView 的 sortDescriptors
的第一个元素匹配,则列显示排序指示符。
您似乎对所有列使用相同的排序描述符。因此,它们都匹配并且都显示排序指示符。
我认为您的排序描述符本质上是损坏的,因为它依赖于 currentClickedHeaderTableColumn
。这表明每列的排序顺序随着“单击”列的变化而变化,这只是被破坏的。给定列的排序顺序(如果表按该列排序,则其应的顺序)不应根据此类不相关状态而改变。
关于objective-c - 所有 NSTableView 标题都显示排序顺序箭头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30342578/