Сортировка строк табличного представления

Табличные представления могут быть сконфигурированы так, чтобы пользователи могли щелкнуть по заголовку столбца для переключения прокрутки ни от одного до порядка по возрастанию или порядка по убыванию. Вы используете дескрипторы вида для включения этого поведения.

Сортировка табличного представления программно

Ваше приложение может указать дескриптор сортировки по умолчанию для использования при отображении данных табличного представления. Это делает это использование NSTableViewsetSortDescriptors: метод. Дескрипторы вида являются массивом NSSortDescriptors экземпляры. Например, следующий код сортирует содержание на основе фамилии и имени:

    [theTableView setSortDescriptors:[NSArray arrayWithObjects:
                                      [NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES selector:@selector(compare:)],
                                      [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES selector:@selector(compare:)],
                                      nil]];

Этот фрагмент кода сортирует содержание косвенно посредством обратного вызова делегата (см. Ответ на Запрос Вида), но не позволит пользователю щелкать в табличном заголовке для изменения порядка сортировки для того столбца. Чтобы дать пользователям эту возможность, необходимо сконфигурировать сортировку на основе для каждого столбца. В таблице, сконфигурированной для сортировки для каждого столбца, щелчок пользователя по табличному заголовку изменяет дескриптор вида табличного представления для отражения текущего состояния вида табличного представления (можно использовать sortDescriptors метод для доступа к дескриптору вида).

Конфигурирование сортирующий для отдельных столбцов таблицы

Можно сортировать отдельные столбцы таблицы программно путем указания NSSortDescriptor прототипный экземпляр для надлежащего NSTableColumn экземпляр, или при помощи Интерфейсного Разработчика.

Конфигурирование сортировки для каждого столбца в коде

Можно установить метод сортировки для столбца программно путем создания прототипа дескриптора вида. Вы создаете прототип при помощи метода sortDescriptorWithKey:ascending:selector: создать NSSortDescriptor экземпляр. Получающийся экземпляр дескриптора вида тогда установлен как прототип сортировки столбца таблицы с помощью метода setSortDescriptorPrototype:. Когда пользователь щелкает по заголовку, дескрипторы вида табличного представления изменяются, и заголовок столбца таблицы отражает направление вида.

Следующий код создает прототип дескриптора вида для a lastName столбец с помощью локализовал сортировку:

NSTableColumn *tableColumn = [theTableView tableColumnWithIdentifier:@"lastName"];
NSSortDescriptor *lastNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"lastName"
                                                                         ascending:YES
                                                                          selector:@selector(compare:)];
[tableColumn setSortDescriptorPrototype:lastNameSortDescriptor];

Конфигурирование сортировки для каждого столбца в интерфейсном разработчике

Для использования Интерфейсного Разработчика для конфигурирования сортировки для каждого столбца выберите столбец таблицы и откройте инспектора Атрибутов Столбца таблицы. Инспектор содержит три средств управления, помогающие Вам сконфигурировать поведение сортировки:

  • Поле Sort Key указывает ключ в модели данных табличного представления что сортировки столбца на.

  • Селекторное поле содержит селектор, который использует вид. Переключение вкладок к полю заставляет поле заполняться compare: селектор.

    Этот селектор сравнения ожидает единственный параметр — значение, которое должно быть сортировано — и возвращается NSComparisonResult. Можно заменить любым селектором метода, придерживающимся того образца, включая собственные пользовательские методы.

    compare: метод работает с NSString, NSDate, и NSNumber объекты. Если Ваш столбец таблицы содержит только строки, можно хотеть рассмотреть использование caseInsensitiveCompare: метод, если чувствительность к регистру неважна. Однако рассмотрите замену этих сигнатур методов с localizedCompare: или localizedCaseInsensitiveCompare: методы для взятия в учетную запись требований языка пользователя.

  • Всплывающее меню Порядка позволяет Вам указывать начальный порядок вида, как возрастающий (значение по умолчанию) или убывание.

Отъезд Ключа сортировки и Селекторного полевого пробела отключает сортировку столбца с помощью настроек в Интерфейсном Разработчике. Однако это не отключает сортировку столбца с помощью других методов.

Ответ на запрос вида

Когда табличное представление сортируется посредством пользовательского действия или путем установки дескрипторов вида табличного представления, источник данных получает a tableView:sortDescriptorsDidChange: сообщение. Источник данных должен реализовать этот метод для поддержки сортировки.

tableView:sortDescriptorsDidChange: метод применяет текущие дескрипторы вида табличного представления к набору модели, и затем перезагружает данные табличного представления. Типичная реализация этого метода делегата показана в Перечислении 7-1.

  Демонстрационная реализация перечисления 7-1 метода делегата tableView:sortDescriptorsDidChange:

- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
    [peopleArray sortUsingDescriptors: [tableView sortDescriptors]];
    [tableView reloadData];
}

Реализация, показанная в Перечислении 7-1, сортирует содержание текущей модели использование дескрипторов вида табличного представления, но это также теряет начальный порядок данных. Если начальный порядок будет важен для Вашего приложения, то Вы захотите предпринять шаги для кэширования первоначального заказа так, чтобы это могло быть восстановлено.