当单元格被重用时,TableViewCell中的心脏按钮状态被保存

时间:2017-03-26 16:42:54

标签: ios swift uitableview tableviewcell

我正在使用xib填充表视图。每个单元格都有一个带有心脏图像的按钮,可以填充或不填充。选择按钮后,它会将按钮所在的行添加到收藏夹视图中。到目前为止,它正在发挥作用。问题是,当我滚动表格视图时,重复使用的单元格显示为填充的心脏而不是空心的。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   if indexPath.row % 2 == 0 {
       let cellIdentifier = "cell"
       let cell = productTableView.dequeueReusableCell(withIdentifier: cellIdentifier ,for :indexPath)
           as! ProductsTableViewCell
       let model = productArray[indexPath.row]
       cell.favouriteButton.tag = indexPath.row
       cell.configureCell(model)

       return cell
   }else {
       let cellIdentifier = "cell2"
       let cell = productTableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! Product2TableViewCell
       let model = productArray[indexPath.row]
       cell.favouriteButton.tag = indexPath.row

       if favouriteProductsArray.count != 0 {
           for fave in favouriteProductsArray {
               if fave.product_id == model.id{
                   cell.favouriteButton.isSelected = true
               }
           }
       }else{
           cell.favouriteButton.isSelected = false
       cell.setupCell(model)
       return cell
   }
}

enter image description here

3 个答案:

答案 0 :(得分:0)

我认为问题在于以下代码:

if favouriteProductsArray.count != 0 {
    for fave in favouriteProductsArray {
        if fave.product_id == model.id{
            cell.favouriteButton.isSelected = true
        }
    }
}else{
    cell.favouriteButton.isSelected = false
}

在第一个if语句中,您没有将isSelected设置为false的逻辑。我会重做该代码如下:

var selected = false
if favouriteProductsArray.count != 0 {
    for fave in favouriteProductsArray {
        if fave.product_id == model.id {
            selected = true
            break
        }
    }
}
cell.favouriteButton.isSelected = selected

这可确保isSelected设置为false,除非您找到匹配的ID。

答案 1 :(得分:0)

我有类似的问题。我所做的是有一个数组来跟踪.isSelected值,并且在dequeuereusablecell之后根据数组中的值设置isSelected。这可能只是一个if语句。

因此,这将是n个元素的数组,其中n是您要加载的食物数量。每个元素都是true或false,这是isSelected的相应值,在dequeuereusablecell之后设置。

答案 2 :(得分:0)

当您在else部分中正确设置了收藏夹按钮时,如果if条件为真,则无法执行此操作。也在那里做。或者更好的是,提取代码以在if语句之外执行。