dequeueReusableCellWithIdentifier:forIndexPath:get的indexPath在哪里使用?

Apple的文档中提到了indexPath参数:

索引路径指定单元格的位置。 当数据源被询问单元时,数据源会收到这些信息,并且应该传递给它。 此方法使用索引路径根据表格视图中单元格的位置执行其他配置。

但是register(Class|Nib):forCellReuseIdentifier:只指定要使用的重用标识符,而不指定一个或一组索引路径。

我认为,也许UITableViewCell有一些方法可以在索引路径上得到它的手,所以它可以说,如果在一个部分的第一行,它可以绕过它的角落,但我没有看到它。 在创建时,它所得到的只是它的风格和重用标识符( initWithStyle:reuseIdentifier: ; 在重新使用时,它被告知的是prepareForReuse

看到旧的dequeueReusableCellWithIdentifier:仍然支持,如果它不能依靠有机会去做,它可能会做什么样的基于索引路径的配置?

我查看了“桌面视图编程指南”,但它自iOS 5以来并未更新。


根据WWDC 2012会议200 - 可可触摸新特性,

如果您使用- dequeueReusableCellWithIdentifier:forIndexPath:将您的单元出列,它将是正确的大小,您将能够在您的单元格的contentView 进行布局

这几乎是UIKit工程师Chris Parker的一句话。

直到iOS 6,你必须继承你的UITableViewCell并覆盖- layoutSubviews如果你想进行布局调整。 从封装的角度来看,这可能仍然是更好的解决方案 - 但是,有时您只需要进行微调,现在可以在- tableView:cellForRowAtIndexPath:执行该操作。


dequeueReusableCellWithIdentifier:dequeueReusableCellWithIdentifier:indexPath:之间最重要的区别是它们是不同的方法! 因此他们可以有不同的表现,而且他们也可以。 这与indexPath无关,真的; 我们只需要一种方法来区分它们。

新的方式

特别是,如果您调用dequeueReusableCellWithIdentifier:indexPath:这表示您正在使用新的iOS 6注册和出队系统。 所以,如果你没有注册这个标识符,你会得到一个很好的崩溃和一个日志消息来解释这个问题。 这个方法永远不会返回零; 它总是返回一个单元格,或者通过创建一个新单元格或通过重新使用单元格。

旧的方式

另一方面,简单和简单的dequeueReusableCellWithIdentifier:是旧的并且必须是向后兼容的。 如果你没有注册这个标识符,它不会抱怨:它只会返回零,让你高和干。 你必须自己创建单元,就像在过去的糟糕日子里一样。

编辑:但也请参见@svena的答案! 新方法(使用indexPath:具有我不知道的第二个优点:单元在返回给您时的大小正确。


我相信它用于调用tableView:heightForRowAtIndexPath:方法,如果存在的话,允许单元格的大小正确。

链接地址: http://www.djcxy.com/p/66857.html

上一篇: Where does the indexPath of dequeueReusableCellWithIdentifier:forIndexPath: get used?

下一篇: How to refresh a UITableViewController or NSFetchedResultsController?