Сортировка столбца в NSOutlineView, который связан с NSTreeController - PullRequest
0 голосов
/ 23 августа 2011

У меня есть NSOutlineView, который связан с NSTreeController.В Интерфейсном Разработчике я связал каждый столбец NSOutlineView с контроллером дерева с ключом контроллера "arrangedObjects" и путем ключа модели в качестве атрибута сущности или метода в моем классе сущности.

Теперь вседругие столбцы сортируются отлично, за исключением одного специального столбца.В специальном столбце есть путь к ключу модели, связанный с методом, который объявлен в моем классе Entity.Этот метод в зависимости от некоторых условий в моем коде вернет либо NSString, либо NSDictionary.Когда он возвращает NSDictionary, метод делегата:

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item 

анализирует NSDictionary и возвращает двойное значение для этой ячейки.Также обратите внимание, что ячейка в этом случае является производной от NSCell и отображает индикатор выполнения.

Короче говоря, мой специальный столбец будет отображать сочетание индикаторов выполнения и строк в зависимости от ситуации.

Я бы хотел реализовать сортировку так, чтобы все индикаторы выполнения оставались вместе, а строки сортировались в алфавитном порядке.

Ответы [ 3 ]

0 голосов
/ 23 августа 2011

Ну, я нашел решение для этого сам и всего через 2 минуты после публикации моего запроса :) Решением было добавить пользовательский ключ сортировки в IB и определить метод с этим именем ключа в моем классе Entity, который возвращает NSInteger.Поскольку я хочу, чтобы все объекты NSDictionary оставались вместе, а все строки NSStrings были отсортированы, я возвращаю соответствующее целое число в зависимости от типа объекта.Примечание для тех, кто может не справиться с сортировкой, не работающей: убедитесь, что в IB включена привязка для sortDescriptor.

0 голосов
/ 14 марта 2013

1001 * попробовать *

NSSortDescriptor *sorter = [[[NSSortDescriptor alloc]
                                 initWithKey:NULL
                                 ascending:YES
                                 selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
[[myOutlineView tableColumnWithIdentifier:@"Name"]setSortDescriptorPrototype:sorter];
0 голосов
/ 23 августа 2011

Возможно, вам повезет, если вы попытаетесь установить дескриптор сортировки столбца таблицы на дескриптор, который вы создаете с помощью компаратора, который просматривает классы объектов.(Вы также можете попробовать заполнить «Ключ сортировки» в IB, используя клавишу «класс», но я думаю, что это может быть менее вероятно ...)

...