UICollectionView cellForItemAtIndexPath 滚动后返回 nil
Posted
技术标签:
【中文标题】UICollectionView cellForItemAtIndexPath 滚动后返回 nil【英文标题】:UICollectionView cellForItemAtIndexPath returns nil after scrolling 【发布时间】:2013-10-29 14:03:24 【问题描述】:我遇到了 UICollectionView 的问题。下面的代码是返回获取某个点的单元格(CGPoint)
CollectionViewCell* cell = (CollectionViewCell*) [mCollectionView cellForItemAtIndexPath: [mCollectionView indexPathForItemAtPoint:point]];
if (cell)
NSLog(@"Cell exists");
else
NSLog(@"Cell doesn't exist");
如果 UICollectionView 保持不动,这将返回一个有效的单元格。如果向下滚动,则返回 nil。我不确定是什么问题。 UICollectionView 滚动工作正常。集合视图单元格没有问题。
有人能帮帮我吗?
【问题讨论】:
查看cellForItemAtIndexPath:
的文档:“对应索引路径的单元格对象,如果单元格不可见或indexPath超出范围,则为nil。”
我试图让可见单元格出现在我的视野中。它返回有效的索引路径。例如,我的视图在 iPad 上的纵向模式下允许 5 行中的 15 个集合视图单元格。经过一些滚动,如果我尝试获取中间单元格的索引路径,它会返回 7 ,这是有效的。但是 [mCollectionView cellForItemAtIndexPath: indexPath] 返回 nil。
检查indexPath
,看看它是否是您所期望的。在滚动之前和之后进行测试。我的猜测是你给它一个CGPoint
相对于错误的视图。您可能需要将该点转换为相对于不同的视图。
【参考方案1】:
不是问题,在 UICollectionView 和 UITableView 中,不可见的单元格会从内存中删除。
【讨论】:
我正在尝试用一个点来获取集合视图中的底层单元格,同时处理捏合手势。 保存单元格的indexPath。调用[tableView reloadData]
并在cellForRowAtIndexPath DataSource 方法中,如果保存的indexPath 等于当前indexPath,则对单元格进行任何操作。
在我的情况下,需要识别捏合手势下的单元格,并用捏合手势做一些动作。所以,仅仅保存索引路径对我没有帮助。【参考方案2】:
如果其他人有这个问题。如果你一直在使用:
[myCollectionView registerClass:[customCell class] forCellWithReuseIdentifier:yourCellIdentifier];
在 viewDidAppear 内部并且您一直使用原型在情节提要上创建单元格或使用 nib 文件,您应该删除 [registerClass:forCellWithReuseIdentifier:]
另外,如果您正在寻找关于 registerCell 的作用以及如何使用它的详细说明,请查看link
【讨论】:
以上是关于UICollectionView cellForItemAtIndexPath 滚动后返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
如何滚动另一个 UICollectionView 下方的 UICollectionView?
UICollectionView 单元内部已加载,但 UICollectionView 未显示
UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]
UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示