当我在触摸时展开UITableViewCell时,我知道我必须更新UITableView。现在我正在做:
tableView.beginUpdates()
tableView.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.Automatic)
tableView.endUpdates()
我是否需要同时使用更新方法和重载方法?或者它只是一个或另一个?我没有完全理解,所以一点解释就太棒了。谢谢!
答案 0 :(得分:3)
不,你不必同时使用它们。您可以通过reloadCell
和beginUpdate
使用endUpdate
技术或手机更新。
当您重新加载特定行时,内部表视图系统会创建2个单元格,然后在新单元格中混合。您可以删除beginUpdates
和endUpdates
,只需调用它即可更改高度。但是动画不会很平滑,你会观察小细胞的线条,同时从更大的细胞高度回来动画。
对于beginUpdates
和endUpdates
,它们用于组插入,删除等,但是强制调用表视图委托并获取所选索引的更改高度是一个老hack。这种技术可以很好地处理高度变化动画。所以你的代码就像
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Write the code to track the selected index path.
tableView.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.Automatic)
}
OR
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView beginUpdates]; // tell the table you're about to start making changes
//Write the code to track the selected index path.
[tableView endUpdates]; // tell the table you're done making your changes
}