如果在didSelectItemAtIndexPath中调用cellForItemAtIndexPath:有什么问题:

时间:2016-02-11 09:22:45

标签: ios uicollectionview uicollectionviewcell uicollectionviewdelegate

我在cellForItemAtIndexPath:方法中调用didSelectItemAtIndexPath:。结果是didSelectItemAtIndexPath:每个单元只调用一次。所以我可以第一次点击一个单元格,然后我可以点击另一个单元格,但是如果我再次点击第一个单元格,则不再调用didSelectItemAtIndexPath(而是所有其他“新”单元格)。

现在我不再调用cellForItemAtIndexPath:,现在didSelectItemAtIndexPath:按预期工作。但为什么我不被允许这样做?有什么理由吗?

1 个答案:

答案 0 :(得分:1)

集合视图为您缓存单元格实例,并在索引路径创建单元格时将它们出列。集合视图对你执行此操作时发生的事情做了一些假设,因此如果你开始在同一索引路径上对单元格发出多个请求,那么奇怪的事情就会开始发生。有时会导致视觉问题,有时会出现交互问题。

如果你想在指定的索引路径上获取单元格,你应该直接询问集合视图,而不是使用你自己的委托方法,这将为你提供屏幕上的现有单元格而不是新单元格。