Фильтрация ячеек 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...
}
Другие вопросы по тегам