这是UITableView -beginUpdates文档错误吗?

时间:2010-04-14 15:05:50

标签: iphone uitableview

我无法围绕他们试图在-beginUpdate的文档中说出的内容:

  

如果需要,请调用此方法   后续插入,删除和   选择操作(例如,   cellForRowAtIndexPath:和   indexPathsForVisibleRows)   同时动画。

让我们看看... cellForRowAtIndexPath:和indexPathsForVisibleRows都是GETTER方法。他们不会更新任何东西,也不会改变任何东西。那么为什么我应该在调用它们之前调用-beginUpdates呢?那些关于这些的动画是什么?好吧,没什么,是吧?只是想确保这在文档中确实是一个错误,我没有错过任何东西。

2 个答案:

答案 0 :(得分:1)

  

让我们看看... cellForRowAtIndexPath:   和indexPathsForVisibleRows都是   GETTER方法

它们只是从消息交换中的一个对象的角度看的getter方法。另一方面,他们参与设定价值。

cellForRowAtIndexPath:是tableview数据源对象中的getter,但tableview使用它来设置特定行的单元格值。同样,indexPathsForVisibleRows是tableview对象中的getter,但另一个对象将使用它来设置它将访问的行的值。

对于beginUpdate块,这两个消息都会传递可能不断变化的信息,因为用户正在使用UI直接更改表的显示行。

  

那我为什么要调用-beginUpdates呢?   在打电话给这些之前?

除非用户使用UI直接操作表的行顺序,否则不会这样做。否则,您根本不使用beginUpdates块。我只用它约五分之一的表。

  

关于这些是什么动画?

UI向用户显示正在移动,插入或删除的行的动画。

根据您之前的五个问题,我认为您的印象是beginUpdates块是表的核心关键功能,并且您不能在不实现块的情况下使用表。

事实并非如此。您只需在允许用户直接编辑行时使用它(不是单元格内容,而是表格中整个单元格的位置。)

该块只是暂时冻结表格的幕后逻辑,以便用户所做的更改可以与现有数据同步。如果没有块,表将尝试使用编辑开始之前就已存在的数据重绘自身。

答案 1 :(得分:0)

这可能不是错误。它允许您执行一组操作(包括但不限于 cellForRowAtIndexPath:indexPathsForVisibleRows),这些操作可能包括添加,删除和重新排序行。将一组这些操作放在beginUpdate / endUpdate块中会导致它们同时进行动画处理。