Обратный вызов для анимации UITableView - PullRequest
4 голосов
/ 10 мая 2010

Есть ли протокол делегата, который включает функцию обратного вызова для завершения анимированных изменений в UITableView? Особенно reloadSection / Rows?

Ответы [ 2 ]

4 голосов
/ 01 ноября 2012

На самом деле, есть ДЕЛАЕТ , кажется, способ сделать это (хотя и не так просто, как следовало бы!).

Хотя прямого доступа к какому-либо обратному вызову нет, похоже, что UITableView анимация происходит в пределах CAAnimation. Поэтому простой доступ к completionBlock из CAAnimation, кажется, дает вам то, что вы хотите.

Вот как я получил 2 анимации для цепочки в моем UITableView подклассе:

#pragma mark - Section expanding/collapsing
- (void)toggleSection:(NSInteger)index {
    int expandedSection = [self ExpandedSection];
    if (expandedSection != NO_EXPANDED_SECTIONS_INDEX) {
        [self beginUpdates];
        [self collapseSection:@(expandedSection)];
        [CATransaction setCompletionBlock:^{
            if (expandedSection != index) {
                [self beginUpdates];
                [self expandSection:@(index)];
                [self endUpdates];
            }
        }];
        [self endUpdates];
    } else {
        [self expandSection:@(index)];
    }
}

Код в методах collapseSection: и expandingSection: просто добавляет / удаляет подразделы, которые необходимо свернуть или развернуть. Ключевой момент здесь, однако, заключается в том, что при использовании этого кода я наконец могу свернуть один подраздел , ТО развернуть следующий подраздел. Раньше обе анимации происходили одновременно, что визуально не было привлекательным.

Надеюсь, это поможет вам! Я долго боролся с этим, бился головой о стену, пока не нашел это.

Это написано против iOS 6.0. Я также очень надеюсь, что в какой-то будущей версии этот обходной путь / хак устареет!

1 голос
/ 10 мая 2010

Это не тот ответ, который вы хотите услышать, но нет *: (

Представитель табличного представления будет отвечать на только эти методы .

Тем не менее, (это немного хак, но) анимация длится около 0,35 секунды, вы можете просто вызвать executeSelector: withObject: afterdelay: . , .

* по крайней мере, насколько я знаю. , .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...