为所有 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 按该列排序的顺序)不应根据在这样无关紧要的状态下。