我必须使用这两种方法吗?

时间:2015-06-22 06:19:59

标签: ios swift uitableview

当我在触摸时展开UITableViewCell时,我知道我必须更新UITableView。现在我正在做:

tableView.beginUpdates()
tableView.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.Automatic)
tableView.endUpdates()

我是否需要同时使用更新方法和重载方法?或者它只是一个或另一个?我没有完全理解,所以一点解释就太棒了。谢谢!

1 个答案:

答案 0 :(得分:3)

不,你不必同时使用它们。您可以通过reloadCellbeginUpdate使用endUpdate技术或手机更新。

当您重新加载特定行时,内部表视图系统会创建2个单元格,然后在新单元格中混合。您可以删除beginUpdatesendUpdates,只需调用它即可更改高度。但是动画不会很平滑,你会观察小细胞的线条,同时从更大的细胞高度回来动画。

对于beginUpdatesendUpdates,它们用于组插入,删除等,但是强制调用表视图委托并获取所选索引的更改高度是一个老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
 }