使用多个排序描述符对基于视图的tableview进行排序并不起作用

时间:2017-10-06 18:37:36

标签: macos sorting nstableview

我无法使用多个排序描述符对基于视图的表视图进行排序。 我有2列,我的第一列有" bank"和" accountNickName"作为价值观,我的第二栏有" bankAccount"。
我想按" bank"那么" accountNickName"然后由" bankAccount"。如果我点击第1栏 我想按" bankAccount",然后"银行",然后" accountNickName"。 如果我点击第二列。
创建sortDescriptors数组并将其绑定到我的arraycontroller不起作用:

sortForStockInfo = [ NSArray arrayWithObjects:
                            [NSSortDescriptor sortDescriptorWithKey:@"bank" ascending:YES selector:@selector(compare:)],
                            [NSSortDescriptor sortDescriptorWithKey:@"accountNickName" ascending:YES selector:@selector(compare:)],
                            [NSSortDescriptor sortDescriptorWithKey:@"account" ascending:YES selector:@selector(compare:)],
                            nil];

tableview有"排序描述符"绑定到阵列控制器"排序描述符"。我想,这就是我必须做的。但它不起作用。我错过了什么?

奇怪的是:如果我使用相同的方法,但我填写了Sortkey,Selector和Order的列属性,它只对一个方面进行排序(例如银行或帐户.countyNickName保持未排序)。因为我每列只能定义一个标准。

1 个答案:

答案 0 :(得分:2)

sortDescriptors是一个数组,单击列的sortDescriptor插入索引0.当用户单击列0然后单击column1时,排序顺序为column1,column0。 实现委托方法- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn并设置arraycontroller的sortDescriptors。例如:

- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn {
    NSArray *sortDescriptors = self.arrayController.sortDescriptors;
    if (sortDescriptors && [sortDescriptors count] > 0) {
        NSSortDescriptor *firstSortDescriptor = sortDescriptors[0]; // sort descriptor of the clicked column
        BOOL ascending = firstSortDescriptor.ascending;
        if ([firstSortDescriptor.key isEqualToString:@"bank"]) {
            self.arrayController.sortDescriptors = @[
                [NSSortDescriptor sortDescriptorWithKey:@"bank" ascending:ascending selector:@selector(compare:)],
                [NSSortDescriptor sortDescriptorWithKey:@"accountNickName" ascending:ascending selector:@selector(compare:)],
                [NSSortDescriptor sortDescriptorWithKey:@"account" ascending:ascending selector:@selector(compare:)]];
        }
        else
            if ([firstSortDescriptor.key isEqualToString:@"account"]) {
                self.arrayController.sortDescriptors = @[
                    [NSSortDescriptor sortDescriptorWithKey:@"account" ascending:ascending selector:@selector(compare:)],
                    [NSSortDescriptor sortDescriptorWithKey:@"bank" ascending:ascending selector:@selector(compare:)],
                    [NSSortDescriptor sortDescriptorWithKey:@"accountNickName" ascending:ascending selector:@selector(compare:)]];
            }
    }
}