2010-04-14 71 views
0

我不能换我的头周围他们试图在这里说,在文档的-beginUpdate什么:这是一个UITableView -beginUpdates文档错误?

调用此方法,如果您想 后来插入,删除和 选择操作(例如, cellForRowAtIndexPath:和 indexPathsForVisibleRows)为 同时动画。

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

+0

你知道,在五个小时内对同一主题的五个问题推动了一点。虽然不是真实的重复,但所有这些问题都会互相影响。在解雇其他人之前,您可能需要等待最初的问题的更多答案。您可能不需要后续的问题。 – TechZen 2010-04-14 15:35:56

+0

那么,研究这样一个复杂的话题确实涉及数千个问题。 – dontWatchMyProfile 2010-04-17 10:27:53

回答

1

让我们来看看...的cellForRowAtIndexPath: 和indexPathsForVisibleRows都是 getter方法

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

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

对于beginUpdate块,这两个消息传递的信息可能会变得不稳定,因为用户使用UI直接更改表中显示的行。

那么为什么要在调用这些之前调用-beginUpdates ?

除非用户直接使用UI操作表的行顺序,否则不要这样做。否则,根本不使用beginUpdates块。我只用了我的桌子中的大约五分之一。

什么是关于这些的动画?

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

从你之前的五个问题来看,我认为你的印象是beginUpdates块是表的中心关键特征,并且你不能在没有实现块的情况下使用表。

这是不是这样的。您只需要在允许用户直接编辑行时使用它(不是单元格内容,而是表格中整个单元格的位置本身)。

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

0

这可能不是一个错误。它允许您执行一组操作(包括但不限于cellForRowAtIndexPath:indexPathsForVisibleRows),这些操作可能包括添加,删除和重新排序行。将这些操作集合在一个beginUpdate/endUpdate块中将使它们同时动起来。