我正在使用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
}
}
答案 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语句之外执行。