Как спроектировать источник данных для UITableView для сортировки с помощью UISegmentedControl?

StackOverflow https://stackoverflow.com/questions/1050381

Вопрос

Я занимаюсь разработкой и кодированием приложения для iPhone для отображения времени просмотра фильмов.В настоящее время у меня есть класс Movie, который содержит:

  • NSString title
  • NSSDate releaseDate
  • NSSDate score

Мой пользовательский интерфейс простой UINavigationController который имеет сегментированный элемент управления в виде заголовка и UITableView для отображения настроек фильмов в Interface Builder.Сегментированное управление состоит из 3 сегментов:Название, дата открытия и оценка (на RottenTomatoes).Данные для табличного представления в настоящее время предоставляются NSMutableArray movies который является свойством AppDelegate.

Я знаю, что могу зарегистрировать целевые действия, используя следующий код, но не знаю, как отсортировать UITableView данные на данный момент:

[segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged];

Как и где мне прибегнуть к UITableView всякий раз, когда UISegmentedControl выбранный сегмент изменяется?

Это было полезно?

Решение

Кроме того, вы можете сортировать данные с помощью любого из sortArrayUsingххх методы в NSArray.

Другие советы

Вы можете поместить некоторую логику в источник данных tableView:cellForRowAtPath: метод, чтобы проверить текущее значение UISegmentedControl и соответствующим образом изменить ячейку, возвращаемую для каждой строки.Затем, когда значение сегментированного элемента управления изменится, все, что вам нужно сделать, это вызвать

[tableView reloadData];

и все готово.

У меня есть элемент управления сегментом, который может упорядочивать/фильтровать элементы тремя разными способами - поскольку количество элементов различается в зависимости от фильтра/порядка, я использую 3 разных объекта NSArray для хранения отсортированных списков.

Поэтому, когда я загружаю данные, я помещаю их версию в правильное место в каждом массиве (или не в массив, в зависимости от фильтра).

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

Метод, вызывающий массив, используется вместо обычного массива, и это означает, что все, что мне нужно сделать, чтобы что-то изменить при изменении сегментированного элемента управления, — это вызвать [tableView reloadData], и все будет сделано за меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top