Хорошо, я не знаю, может это просто плохие манеры, но я чувствую, что собираюсь ответить на свой вопрос здесь.
Во-первых, спасибо за все остальные ответы, вы все, конечно, были правы, но ни один из ответов не решил мою проблему.
Оказывается, в коде есть еще одна область, которая выполняет другую проверку, а затем вызывает один из методов делегата tableView, который, похоже, отменяет анимацию.
Итак, ответ следующий:
Когда вы удаляете строку, но анимация не работает, убедитесь, что вы не вызываете didSelectRowAtIndexPath:indexPath до запуска анимации. Это отменит анимацию.
Если у вас НЕ возникла эта проблема, вот действительно типичный код для расширения, две строки в примере:
Обратите внимание, что facebookRowsExpanded — это переменная класса, которую вы должны иметь:
if ( [theCommand isEqualToString:@"fbexpander"] )
{
NSLog(@"expander button......");
[tableView deselectRowAtIndexPath:indexPath animated:NO];
NSArray *deleteIndexPaths;
NSArray *insertIndexPaths;
facebookRowsExpanded = !facebookRowsExpanded;
// you must do that BEFORE, not AFTER the animation:
if ( !facebookRowsExpanded ) // ie, it was just true, is now false
{
deleteIndexPaths = [NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:2 inSection:0],
[NSIndexPath indexPathForRow:3 inSection:0],
nil];
[tableView beginUpdates];
[tableView
deleteRowsAtIndexPaths:deleteIndexPaths
withRowAnimation: UITableViewRowAnimationMiddle];
[tableView endUpdates];
}
else
{
insertIndexPaths = [NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:2 inSection:0],
[NSIndexPath indexPathForRow:3 inSection:0],
nil];
[tableView beginUpdates];
[tableView
insertRowsAtIndexPaths:insertIndexPaths
withRowAnimation: UITableViewRowAnimationMiddle];
[tableView endUpdates];
}
// DO NOT do this at the end: [_superTableView reloadData];
return;
}
ПРИМЕЧАНИЕ: ваш код для numberOfRowsInSection должен использовать facebookRowsExpanded.
(это будет что-то вроде «если facebookRowsExpanded вернет 7, иначе вернет 5»)
ПРИМЕЧАНИЕ: ваш код для cellForRowAtIndexPath должен использовать facebookRowsExpanded.
(он должен вернуть правильную строку, в зависимости от того, расширены вы или нет.)
person
Daniel Retief Fourie
schedule
21.08.2013
animateWithDuration:animations:
. Табличное представление обрабатывает анимацию самостоятельно, вам не нужно ничего делать. - person IluTov   schedule 20.08.2013commitEditingStyle:
метод, пожалуйста - person Valentin Shamardin   schedule 20.08.2013reloadData
не потому, что это может нарушить анимацию? - person Timothy Moose   schedule 21.08.2013