objective-c - 所有 NSTableView 标题都显示排序顺序箭头?

标签 objective-c macos cocoa nstableview nssortdescriptor

我更改了 NSTableView 列的排序描述符。新的描述符非常棒,但现在所有标题都显示了排序箭头。

enter image description here

enter image description here

为什么?如何保留属于我当前排序依据的列的标题的排序箭头?这是代码(旧描述符被注释掉):

        //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/

相关文章:

objective-c - Mac OS X 10.8 : Replacement for Lock/UnlockPixels() for the cocoa applications

objective-c - 如何在其上绘制全屏叠加层和文本+文本字段?

macos - 绕过图形管理员密码打开 OSX 应用程序命令行解决方案

ruby - 在 Mac OS X 10.6.4 上安装 iconv gem 真的很费劲

objective-c - CGEventPostToPSN 不适用于 cgkeycode (56)

ios - 在 UITextField 下放置一行的正确方法是什么

iphone - 泛化对 NSLog 的调用

objective-c - 如何将 DD-MM-YYYY 日期格式字符串转换为 YYYY-MM-DD 日期格式字符串或转换为 Objective-C 中的 NSDate 对象?

objective-c - 用 Swift 编写的委托(delegate)与 Objective-C 期望的选择器不匹配

ios - scanForPeripheralsWithServices :options: and CBCentralManagerScanOptionSolicitedServiceUUIDsKey