我无法围绕他们试图在-beginUpdate的文档中说出的内容:
如果需要,请调用此方法 后续插入,删除和 选择操作(例如, cellForRowAtIndexPath:和 indexPathsForVisibleRows) 同时动画。
让我们看看... cellForRowAtIndexPath:和indexPathsForVisibleRows都是GETTER方法。他们不会更新任何东西,也不会改变任何东西。那么为什么我应该在调用它们之前调用-beginUpdates呢?那些关于这些的动画是什么?好吧,没什么,是吧?只是想确保这在文档中确实是一个错误,我没有错过任何东西。
答案 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
块中会导致它们同时进行动画处理。