Фильтрация ячеек UITableView с анимацией - iPhone Development
Это кажется достаточно простым, но пока я не могу найти решение.
В основном у меня есть сегментированный элемент управления с двумя вариантами. Первым является значение по умолчанию (и оно автоматически отображается при загрузке), и при его выборе отображаются все строки в табличном представлении. Второй фильтр ограничивает отображаемые строки. Это точно такая же настройка, которая используется на вкладке "Последние" в приложении "Телефон" iPhone, которая фильтрует "Все" и "Пропущенные" вызовы.
В настоящее время у меня есть загрузка данных из двух разных массивов. Проблема в том, что когда я меняю данные, отсутствует анимация, которая обозначает, что строки были отфильтрованы. Apple реализовала это в своем приложении для телефона, но я не вижу способа добиться этого.
Возможно, необходимо будет удалить и заново добавить каждую ячейку, когда пользователь переключается между двумя состояниями, или, возможно, установка высоты ячеек, которую я хочу скрыть, равной 0, приведет к тому же эффекту? У кого-нибудь есть опыт создания этой анимации типа аккордеона?
Я искал здесь некоторые подсказки, но у меня возникли проблемы с прокруткой кода, который работает. Кто-нибудь реализовывал это раньше? Если да, то как ты получил его на работу?
2 ответа
Вы можете достичь аналогичного эффекта, позвонив deleteRowsAtIndexPaths:withRowAnimation:
а также insertRowsAtIndexPaths:withRowAnimation:
на вашем табличном представлении с UITableViewRowAnimationFade
анимация.
Вы смотрели в reloadSections:withRowAnimation:?
Основная идея заключается в вызове reloadSections:withRowAnimation: и в переключателе реализации UITableViewDataSource для сегментированного элемента управления selectedSegmentIndex.
Если предположить, что ваши данные плоские (только один раздел), они будут выглядеть примерно так:
- (IBAction)segmentSwitch:(id)sender
{
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (self.segmentedControl.selectedSegmentIndex)
{
default:
case 0:
return [self.allRows count];
case 1:
return [self.onlySomeRows count];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
id data;
switch (self.segmentedControl.selectedSegmentIndex)
{
default:
case 0:
data = [self.allRows objectAtIndex:[indexPath row]];
break;
case 1:
data = [self.onlySomeRows objectAtIndex:[indexPath row]];
break;
}
//TODO: use data to populate and return a UITableViewCell...
}