Swift - 单独的视图具有共享相同内存的子视图?

时间:2017-08-07 05:36:46

标签: ios iphone swift memory uicollectionview

快到新手了。我有一个来自一个viewcontroller的嵌套CollectionView。主视图控制器有7个collectionviewcell(下面的代码中为“Level1Cell”)。每次单击按钮或触发事件时,我都希望使用新数据重新加载collectionView。

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

}

然后,在调用reload之后,它将在每个嵌套的CollectionViewCell上再次调用重新加载。

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来更新视图控制器中视图和嵌套视图中的数据?

谢谢!

1 个答案:

答案 0 :(得分:0)

UIcollectionview将重复使用单元格。您必须为方法

中的行提供所需的数据
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

或者只是清除单元格中的先前数据。