Как спроектировать источник данных для UITableView для сортировки с помощью UISegmentedControl?
-
20-08-2019 - |
Вопрос
Я занимаюсь разработкой и кодированием приложения для 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], и все будет сделано за меня.