Как я могу узнать, когда [UITableView setEditing: YES animated: YES] завершился?
Я не хочу приводить какой-либо контекст, потому что я хочу, чтобы кто-нибудь не предлагал мне обходные пути, которые меня не интересуют.
Я хочу вызвать вышеупомянутое, а затем вызвать отдельную функцию, когда анимация будет завершена.
Я отредактировал сообщение, чтобы дать контекст и некоторые обходные пути. Изначально я установил Edit и сразу перезагрузил данные таблицы.
[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.
3 ответа
[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
}
];
Версия принятого ответа Swift 4 :
CATransaction.begin()
CATransaction.setCompletionBlock {
// your animation has finished
}
tableView.setEditing(true, animated: true)
CATransaction.commit()
Похожие вопросы
Связанные вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].