UICollectionView在滚动后返回nil的cellForItemAtIndexPath

3

我遇到了关于UICollectionView的问题。以下代码是用于返回获取给定点(CGPoint)处的单元格:

CollectionViewCell* cell = (CollectionViewCell*) [mCollectionView cellForItemAtIndexPath:       [mCollectionView indexPathForItemAtPoint:point]];
if (cell)
     NSLog(@"Cell exists");
else
     NSLog(@"Cell doesn't exist");

如果UICollectionView保持静止,这将返回一个有效的单元格。 如果向下滚动,则返回nil。 我不确定问题出在哪里。 UICollectionView滚动正常运作,没有集合视图单元格的问题。

请问有人可以帮我解决这个问题吗?


1
参见cellForItemAtIndexPath:文档: "在相应的索引路径处的单元格对象,或者如果单元格不可见或indexPath超出范围,则为nil。" - Matthias Bauch
我正在尝试获取视图上可见的单元格。它返回有效的索引路径。例如,我的视图在iPad纵向模式下允许15个集合视图单元格分布在5行中。经过一些滚动后,如果我尝试获取中间单元格的索引路径,它会返回7,这是有效的。但是[mCollectionView cellForItemAtIndexPath: indexPath]返回nil。 - user862972
检查您获取的 indexPath 是否符合预期。在滚动之前和之后进行测试。我猜测您可能会给出相对于错误视图的 CGPoint。您可能需要将该点转换为相对于其他视图。 - Gavin
2个回答

1

在UICollectionView和UITableView中,不可见的单元格会被从内存中删除,这不是一个问题。


1
我正在尝试在处理捏合手势时,通过一个点获取集合视图中的基础单元格。 - user862972
保存单元格的indexPath。调用[tableView reloadData],在cellForRowAtIndexPath数据源方法中,如果保存的indexPath等于当前indexPath,则对该单元格进行任何操作。 - Javi Campaña
1
在我的情况下,需要识别捏合手势下的单元格,并对捏合手势执行一些操作。因此,仅保存索引路径对我没有帮助。 - user862972

0

如果有其他人遇到了这个问题。如果你一直在使用:

[myCollectionView registerClass:[customCell class] forCellWithReuseIdentifier:yourCellIdentifier];

如果你在viewDidAppear方法中使用原型创建单元格或使用nib文件,那么应该删除[registerClass:forCellWithReuseIdentifier:]

此外,如果你想要了解registerCell的作用以及如何使用它,请查看这个链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接