我正在尝试将最喜欢和最喜欢的功能实现到我的单元中。在这里,最初,我在集合视图中显示单元格按钮图标favorite (gray)
,它是最不喜欢的,但是单击该按钮后,它将显示绿色,这是它的最喜欢的。从JSON
中,我得到的响应是哪些单元格已被收藏,而其他单元格则不受欢迎。它可以正常工作,但是当我单击JSON
最喜欢的启用绿色按钮时,它不会通过单击更改为灰色,它可以正常工作,但双击时却调用了JSON
,因此3rd
单击再次添加收藏夹。
在这里,在我的代码下方-
var checked = false
@IBAction func favoritesTapped(_ sender: Any) {
if checked {
favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
checked = false
delegate?.unfavoriteButtonPressed(cell: self)
} else {
favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
checked = true
delegate?.favoriteButtonPressed(cell: self)
}
}
上面的代码我用于按钮单击以更改图像,并且最初我还固定了灰色checked = false
进入项目中的收藏夹视图单元格
if indexPath.row < cfavoritesIDData.count {
if let i = cfavoritesIDData[indexPath.item] {
cell.favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
}
else {
print("id is nil")
cell.favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
}
}
问题:如果我点击启用了JSON的绿色按钮(收藏夹),则其调用效果不佳,但是3秒钟后按钮图标没有变为绿色,仅单击其变化的灰色即可。
答案 0 :(得分:0)
您需要将单元格模型存储在View Controller
中,该单元格不应包含checked
布尔值,当您在cellForRow:
中配置单元格时,请在此告诉它是否选中。
按下按钮时,您应该有一个delegate
回调或closure
来告诉View Controller
,IndexPath
'x'处的单元格按下了它喜欢的按钮并检查是否检查反应的模型,然后重新配置单元。
答案 1 :(得分:0)
您可以使用UIButton的selected属性代替选中的变量:
if indexPath.row < favoritesIDData.count {
if let i = cfavoritesIDData[indexPath.item] {
cell.favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
cell.favbutton.setSelected = true
}
else {
print("id is nil")
cell.favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
cell.favbutton.setSelected = false
}
}
@IBAction func favoritesTapped(_ UIButton: favButton) {
if favButton.isSelected {
favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
checked = false
delegate?.unfavoriteButtonPressed(cell: self)
} else {
favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
checked = true
delegate?.favoriteButtonPressed(cell: self)
}
}
注意:请勿按照正确的语法复制粘贴更改。