Вызвать метод после завершения [self.tableView endUpdates] - PullRequest
3 голосов
/ 07 марта 2012

Я хочу добавить кнопку SliderButton после завершения анимации, но это не работает, она добавляет кнопку, когда удаление раздела анимируется.

    [coursesTable beginUpdates];
    [coursesTable deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];
    [coursesTable endUpdates];
    [self.view addSubview:sliderButton];

Есть ли возможность, что я могу вызвать метод, который сделает это для меня, когда закончится анимация?

Ответы [ 4 ]

7 голосов
/ 16 октября 2012

Я полагаю, что упаковка обновления таблицы в animateWithDuration будет работать:

[UIView animateWithDuration:0.0 animations:^{
    [coursesTable beginUpdates];
    …
    [coursesTable endUpdates];
} completion:^(BOOL finished) {
    // Code to run when table updates are complete.
}];

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

Я использовал эту технику за один раз и достаточно протестировал ее, чтобы убедиться, что блок завершения вызывается после того, как я вызвал метод endUpdates таблицы, но переписал свой код, так что он мне больше не нужен, пока я полностью не проверил, что анимация была фактически закончена.

6 голосов
/ 07 марта 2012

Вы можете найти ответ здесь:

Как определить, что анимация закончилась на UITableView beginUpdates / endUpdates?

Надеюсь, это поможет!

0 голосов
/ 07 марта 2012
[coursesTable deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];

после этого tableview снова запрашивает данные из своего источника данных ... поэтому все методы источника данных, включая cellforRow, снова вызывается ..

я предлагаю сохранитьBOOL удаляет.

, теперь сделайте это

    [coursesTable beginUpdates];
        [coursesTable deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];
        [coursesTable endUpdates];
Deleting = YES;

в методе cellForRow

{
if (index path.row == lastrow ) // last rowcell is reached
if(Deleting)
{
//tableView has reloaded.
    [self.view addSubview:sliderButton];
    Deleting = NO;;


}
}
0 голосов
/ 07 марта 2012

Я также не нашел решения этой проблемы. Я должен использовать executeSelector: withObject: afterDelay: для выполнения своей работы.

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