2013-10-29 57 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