2017-08-07 55 views
1

新來swift。我有一個viewcontroller嵌套的CollectionView。主視圖控制器有7個collectionviewcell(下面代碼中的「Level1Cell」)。每次我點擊一個按鈕或觸發一個事件,我都希望collectionView能夠重新加載新數據。Swift - 單獨的視圖具有共享相同內存的子視圖?

func eventHandler() { 
// updates data 
myCollectionView.reloadData() 

} 

然後,在它調用reload之後,它會在每個嵌套的CollectionViewCell上再次調用reload。

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Level1Cell", for: indexPath) as! Level1Cell 
    cell.appsCollectionView.reloadData() 
    return cell 
} 

問題是,讓我說,我想,爲第一個單元格,設置一個特定的行一些文本。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {     
    if(self.index == 0 && indexPath.row == 30){ 
     rightCell.textLabel.text = "asdasd" 
    } 

第四屆「Level1Cell」細胞不知何故有它的標籤也設置在第30行,而不是第二和第三位。在遍歷調試器之後,我意識到單元在重新加載之後,第四個單元「Level1Cell」被設置爲具有與第一單元相同的存儲器地址(爲什麼重新加載會這樣 - 不應該爲它分配新的存儲器每個「Level1Cell」? - 我如何解決這個問題)。另外,我是否應該不使用reload來更新視圖控制器中的數據和嵌套視圖中的數據?

謝謝!

回答

0

UIcollectionview將重用單元。您必須提供所需的數據行方法

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

或者只是清除單元格中的以前的數據。

+0

你提供的數據是什麼意思。我設置了正確的Cell.textLabel.text。在「leve1Cell」的情況下,我也做了cell.data = xyz,但沒有放在這裏。 – coppthi

+0

我的意思是,如果你沒有設置新的或者不在某個indexpath中刪除單元格中的舊標籤,它們將包含舊數據 –

+0

,因此在遍歷我的調試器之後,它是具有相同存儲器地址的Level1Cell。應該每次都要分配新的內存。但是調用reload會重複使用pre-cell的內存? – coppthi