TableView项目在滚动时刷新

时间:2018-03-26 09:58:31

标签: ios swift uitableview uicollectionview

将UICollectionView作为UITableView行的子级。 UICollectionView包含图像,但每当我向下滚动tableview时,集合视图图像随机消失。我正在为我的问题参考附加图像。请建议我如何阻止这一点。 enter image description here

我希望我的tableview是这样的。滚动时它的项目不应该改变。

-------------------------------------------- -------------------------------------------------- ------------------------------------------------

在滚动桌面视图中,collectionview图像消失了。滚动后看起来像这样。

代码如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

    let cell:PartOfLookTableViewCell = self.looksListTable.dequeueReusableCell(withIdentifier: "cell") as! PartOfLookTableViewCell

    let oneRecord = looksArray[indexPath.row]

    cell.myCollectionView.loadInitial(_dataArray: oneRecord.imagesArray, isLooks: 1)

    return cell
}

将数据加载到CollectionView的代码:

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: looksReuseIdentifier, for: indexPath) as! CustomCollectionViewCell

          let oneRecord = inputArray[indexPath.row]

          cell.productImage.sd_setImage(with: URL.init(string: oneRecord.thumb_url)){ (image, error, cacheType, url) in

              DispatchQueue.main.async {
                  cell.productImage.image = image
              }

          }

        }        
   }
}

1 个答案:

答案 0 :(得分:0)

@Sourabh Bissa:

UITableView使用方法CellForRowAtIndexPath重用单元格,只要新单元格可见,此方法就会重用数据源。

这里非常重要的是维护数据源:

在索引路径中的行的case单元格中,将更新的值提供给集合视图方法,但不在主Queue中重新加载。获取数据源后立即尝试执行此操作。

索引路径中行的Cell将如下所示:

    guard let cell = self.tableview.dequeueReusableCell(withIdentifier: "cell") as! PartOfLookTableViewCell else {
        return UITableViewCell()
    }

    let oneRecord = looksArray[indexPath.row]

    cell.configureCell(for record : oneRecord with looks : 1)

    return cell

现在在单元格中,您将拥有集合视图出口,您将在其中实现集合视图数据源方法,并在那里异步下载图像。

Cell Class将如下所示:

  class PartOfLookTableViewCell: UITableViewCell {

 @IBOutlet weak var collectionView: UICollectionView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    collectionView.delegate = self
    collectionView.dataSource = self
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}


func configureCell(for record : Record , with looks : Int) {

    // Here reload your collection view

    // This collection view will be specific to the cell.

    collectionView.reloadData()
}
}

 extension PartOfLookTableViewCell : UICollectionViewDelegate ,  UICollectionViewDataSource {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    //return  array
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    // Asyncronously download images
}
}

这是在不使用任何标签的情况下实现您的要求的方法。如果您有任何查询,请告诉我。