如果在 didSelectItemAtIndexPath 中调用 cellForItemAtIndexPath: 有什么问题:
What is wrong if cellForItemAtIndexPath: is called in didSelectItemAtIndexPath:
我在didSelectItemAtIndexPath:
方法中调用了cellForItemAtIndexPath:
。结果是 didSelectItemAtIndexPath:
每个单元格只被调用一次。所以我可以第一次点击一个单元格,然后我可以点击另一个单元格,但如果我再次点击第一个单元格,则不再调用 didSelectItemAtIndexPath
(但所有其他 "new" 单元格)。
现在我不再调用 cellForItemAtIndexPath:
,现在 didSelectItemAtIndexPath:
可以正常工作了。但是为什么不允许我这样做呢?有什么原因吗?
集合视图正在为您缓存单元格实例,您在索引路径中创建单元格时将它们出列。集合视图对执行此操作时发生的情况做出一些假设,因此如果您开始对同一索引路径中的单元格发出多个请求,奇怪的事情就会开始发生。有时这会导致视觉问题,有时会导致交互问题。
如果您想获取指定索引路径处的单元格,您应该直接询问集合视图而不是使用您自己的委托方法,这将为您提供屏幕上的现有单元格而不是新单元格。
我在didSelectItemAtIndexPath:
方法中调用了cellForItemAtIndexPath:
。结果是 didSelectItemAtIndexPath:
每个单元格只被调用一次。所以我可以第一次点击一个单元格,然后我可以点击另一个单元格,但如果我再次点击第一个单元格,则不再调用 didSelectItemAtIndexPath
(但所有其他 "new" 单元格)。
现在我不再调用 cellForItemAtIndexPath:
,现在 didSelectItemAtIndexPath:
可以正常工作了。但是为什么不允许我这样做呢?有什么原因吗?
集合视图正在为您缓存单元格实例,您在索引路径中创建单元格时将它们出列。集合视图对执行此操作时发生的情况做出一些假设,因此如果您开始对同一索引路径中的单元格发出多个请求,奇怪的事情就会开始发生。有时这会导致视觉问题,有时会导致交互问题。
如果您想获取指定索引路径处的单元格,您应该直接询问集合视图而不是使用您自己的委托方法,这将为您提供屏幕上的现有单元格而不是新单元格。