新來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來更新視圖控制器中的數據和嵌套視圖中的數據?
謝謝!
你提供的數據是什麼意思。我設置了正確的Cell.textLabel.text。在「leve1Cell」的情況下,我也做了cell.data = xyz,但沒有放在這裏。 – coppthi
我的意思是,如果你沒有設置新的或者不在某個indexpath中刪除單元格中的舊標籤,它們將包含舊數據 –
,因此在遍歷我的調試器之後,它是具有相同存儲器地址的Level1Cell。應該每次都要分配新的內存。但是調用reload會重複使用pre-cell的內存? – coppthi