为所有 NSTableView 显示排序顺序箭头 headers?
Sort order arrow is displayed for all NSTableView headers?
我更改了 NSTableView 列的排序描述符。新的描述符是 rockinggood,但现在所有 header 都显示了排序箭头。
为什么?如何保留属于我当前排序依据的列的 header 的排序箭头?这是代码(旧描述符被注释掉):
//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;
}];
我相信它的工作原理是 table 视图有它的 sortDescriptors
属性,它是有效的排序描述符数组(主要、次要等)。
如果列的 sortDescriptorPrototype
与 table 视图的 sortDescriptors
的第一个元素匹配,则该列显示排序指示符。
您似乎对所有列都使用了相同的排序描述符。因此,它们都匹配并且都显示排序指示符。
我认为您的排序描述符由于依赖 currentClickedHeaderTableColumn
而天生就被破坏了。这表明每列的排序顺序随着 "clicked" 列的变化而变化,这只是被破坏了。给定列的排序顺序(它 将 在 如果 table 按该列排序的顺序)不应根据在这样无关紧要的状态下。
我更改了 NSTableView 列的排序描述符。新的描述符是 rockinggood,但现在所有 header 都显示了排序箭头。
为什么?如何保留属于我当前排序依据的列的 header 的排序箭头?这是代码(旧描述符被注释掉):
//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;
}];
我相信它的工作原理是 table 视图有它的 sortDescriptors
属性,它是有效的排序描述符数组(主要、次要等)。
如果列的 sortDescriptorPrototype
与 table 视图的 sortDescriptors
的第一个元素匹配,则该列显示排序指示符。
您似乎对所有列都使用了相同的排序描述符。因此,它们都匹配并且都显示排序指示符。
我认为您的排序描述符由于依赖 currentClickedHeaderTableColumn
而天生就被破坏了。这表明每列的排序顺序随着 "clicked" 列的变化而变化,这只是被破坏了。给定列的排序顺序(它 将 在 如果 table 按该列排序的顺序)不应根据在这样无关紧要的状态下。