【问题标题】:What is wrong if cellForItemAtIndexPath: is called in didSelectItemAtIndexPath:如果在 didSelectItemAtIndexPath: 中调用 cellForItemAtIndexPath: 有什么问题:
【发布时间】:2016-02-11 09:22:44
【问题描述】:

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

现在我不再打电话给cellForItemAtIndexPath:,现在didSelectItemAtIndexPath: 可以正常工作。但是为什么我不允许这样做呢?有什么原因吗?

【问题讨论】:

  • 你到底想做什么?
  • 你应该展示你对cellForRowdidSelect的实现
  • 如果您在 didselectRowAtIndexPath 中获取单元格。你可以通过这种方式得到它CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath];
  • 您是在调用集合视图方法还是您的委托方法(cellForItemAtIndexPath:collectionView:cellForItemAtIndexPath:)?
  • @RahulVyas:我尝试将单元格用于弹出框的直通视图。因此我需要一个由数据源生成的UIView 对象。

标签: ios uicollectionview uicollectionviewcell uicollectionviewdelegate


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多