2013-10-29 100 views
3

我遇到UICollectionView问题。下面的代码是返回获得的细胞在一个点(CGPoint)UICollectionView cellForItemAtIndexPath在滚动后返回nil

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

如果UICollectionView是左还是这将返回一个有效的单元格。如果向下滚动,则返回nil。我不确定是什么问题。 UICollectionView滚动工作正常。 collectionview单元没有问题。

请问有人能帮我一下吗?

+1

请参阅['cellForItemAtIndexPath:']的文档(https://developer.apple.com/library/ios/)文档/ UIKit的/参照/ UICollectionView_class /参考/#的reference.html // apple_ ref/occ/instm/UICollectionView/cellForItemAtIndexPath :):“对应索引路径的单元格对象,或者如果单元格不可见或indexPath超出范围,则为nil。 –

+0

我想在我的视图中获取可见单元格。它返回有效的索引路径。例如,我的视图允许在iPad上以纵向模式显示5行中的15个集合视图单元格。一些滚动后,如果我尝试获取中间单元格的索引路径,它将返回7,这是有效的。但[mCollectionView cellForItemAtIndexPath:indexPath]返回nil。 – user862972

+0

检查你所看到的'indexPath'是否是你期望的。在滚动之前和之后进行测试。我的猜测是,你给它一个相对于错误观点的CGPoint。您可能需要将该点转换为相对于不同视图。 – Gavin

回答

1

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

+1

我正在尝试使用点来获取集合视图中的基础单元格,同时处理捏合手势。 – user862972

+0

保存单元格的indexPath。调用'[tableView reloadData]'并在cellForRowAtIndexPath DataSource方法中,如果保存的indexPath等于当前的indexPath,则您对该单元格执行任何操作。 –

+1

在我的情况下,需要识别捏合手势下的单元格,并使用捏手势执行一些操作。所以,只保存索引路径不会帮助我。 – user862972

0

如果别人有这个问题。如果你已经用:

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

viewDidAppear的内部,你一直在使用原型,以创建故事板细胞或用笔尖文件,你应该删除[的registerClass:forCellWithReuseIdentifier:]

而且,如果你正在寻找关于registerCell做什么以及如何使用它的一个很好的解释,请查看link