Ответ 1
[CATransaction begin];
[CATransaction setCompletionBlock: ^{
// your animation has finished
}];
[tableView setEditing:YES animated:YES];
[CATransaction commit];
Обратите внимание, что setCompletionBlock
должно быть сверху.
Как узнать, когда [UITableView setEditing: YES animated: YES] завершено?
Я не хочу давать какой-либо контекст, потому что я хочу избежать того, чтобы кто-нибудь давал мне обходные пути, которые меня не интересуют.
То, что я хочу, это вызвать выше, а затем создать отдельную функцию, когда анимация будет завершена.
Я отредактировал сообщение, чтобы дать контекст и некоторые обходные пути. Первоначально я устанавливалEditing и сразу перезагружал данные таблицы.
[tableView setEditing:YES animated:YES];
[tableView reloadData];
Проблема в том, что таблица перезагружается до начала анимации, и поэтому анимация никогда не будет видна.
Вот несколько способов обхода:
[tableView setEditing:YES animated:YES];
[self performSelector:@selector(ReloadTable) withObject:nil afterDelay:1.0];
Это работает, но если я ошибаюсь, это будет выглядеть плохо. Поэтому мне нужно знать, что такое задержка, что я могу понять, но мы не гарантируем, что задержка всегда будет одинаковой.
isEditing = YES;
[tableView reloadData];
[tableView setEditing:YES animated:YES];
Это может работать, но таблица ведет себя по-разному в зависимости от того, находится ли мы в режиме редактирования. Поэтому я должен использовать свою переменную isEditing вместо стандартного UITableView.editing. Я бы предпочел не создавать новую логическую переменную isEditing.
[tableView setEditing:YES animated:YES];
[tableView insertRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationTop];
Это почти хорошо работает, но в режиме редактирования первая строка должна иметь UITableViewCellEditingStyleInsert, в то время как другие строки получают UITableViewCellEditingStyleDelete. И с приведенным выше кодом стиль редактирования устанавливается перед тем, как добавляется строка. Поэтому вторая строка заканчивается UITableViewCellEditingStyleInsert.
[CATransaction begin];
[CATransaction setCompletionBlock: ^{
// your animation has finished
}];
[tableView setEditing:YES animated:YES];
[CATransaction commit];
Обратите внимание, что setCompletionBlock
должно быть сверху.
В iOS 4 вы можете сделать следующее:
[UIView animateWithDuration:0.3f
animations:^{
[self.tableView setEditing:YES animated:NO];
}
completion:^(BOOL finished){
// Do something
}
];