好的,我不知道这是不是只是不礼貌,但我感觉我将在这里回答自己的问题。
首先,感谢所有其他答案,你们当然都是正确的,但没有一个答案解决了我的问题。
事实证明,在代码中还有另一个区域执行了不同的检查,然后调用了tableView代理方法之一,似乎取消了动画。
因此,答案如下:
当您的行正在删除但动画不起作用时,请确保在动画开始之前不要调用didSelectRowAtIndexPath:indexPath。这将取消动画。
如果您没有那个问题,这是一些非常典型的扩展代码,例如示例中的两行:
请注意,facebookRowsExpanded是您必须拥有的类变量:
if ( [theCommand isEqualToString:@"fbexpander"] )
{
NSLog(@"expander button......");
[tableView deselectRowAtIndexPath:indexPath animated:NO];
NSArray *deleteIndexPaths;
NSArray *insertIndexPaths;
facebookRowsExpanded = !facebookRowsExpanded;
if ( !facebookRowsExpanded )
{
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];
}
return;
}
注意:您的
numberOfRowsInSection方法必须使用facebookRowsExpanded。
(它大概是这样的:“如果facebookRowsExpanded返回7,则返回7,否则返回5”)
注意:您的
cellForRowAtIndexPath方法必须使用facebookRowsExpanded。
(根据您是否展开,它必须返回正确的行。)
animateWithDuration:animations:
块。表格视图会自行处理动画,您不需要做任何其他操作。 - IluTovcommitEditingStyle:
方法。 - Valentin ShamardinreloadData
吧,因为那很可能会破坏动画? - Timothy Moose