Фильтрация ячеек UITableView с анимацией - iPhone Development - PullRequest
0 голосов
/ 02 сентября 2010

Это кажется достаточно простым, но пока я не могу найти решение.

В основном у меня есть сегментированный элемент управления с двумя вариантами. Первым является значение по умолчанию (и оно автоматически отображается при загрузке), и при его выборе отображаются все строки в табличном представлении. Второй фильтр ограничивает отображаемые строки. Это точно такая же настройка, которая используется на вкладке «Последние» в приложении «Телефон» iPhone, которое фильтрует все и пропущенные вызовы.

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

Возможно, необходимо будет удалить и заново добавить каждую ячейку, когда пользователь переключается между двумя состояниями, или, возможно, установка высоты ячеек, которую я хочу скрыть, равной 0, приведет к тому же эффекту? У кого-нибудь есть опыт создания этой анимации типа аккордеона?

Я искал здесь для некоторых подсказок, но у меня возникают проблемы с прокруткой некоторого кода, который работает. Кто-нибудь реализовывал это раньше? Если да, то как ты заставил его работать?

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Вы можете добиться аналогичного эффекта, вызвав deleteRowsAtIndexPaths:withRowAnimation: и insertRowsAtIndexPaths:withRowAnimation: в вашем табличном представлении с анимацией UITableViewRowAnimationFade.

0 голосов
/ 04 августа 2012

Вы смотрели на 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...
}
...