【发布时间】:2019-02-05 15:03:13
【问题描述】:
我正在尝试为位于 collectionView 单元格中的按钮的正常状态设置图像。按下按钮时,图像会发生变化。问题是每四个单元格在按下按钮时重复与原始单元格相同的图像。有没有办法让它不重复,当按下按钮时,它只针对那个单独的单元格?
代码如下:
class FavoritesCell: UICollectionViewCell {
var isFavorite: Bool = false
@IBOutlet weak var favoritesButton: UIButton!
@IBAction func favoritesButtonPressed(_ sender: UIButton) {
_ = self.isFavorite ? (self.isFavorite = false, self.favoritesButton.setImage(UIImage(named: "favUnselected"), for: .normal)) : (self.isFavorite = true, self.favoritesButton.setImage(UIImage(named: "favSelected"), for: .selected))
}
}
我尝试过这样做,但由于某种奇怪的原因,即使按下按钮,也不会显示“选定”状态图像:
let button = UIButton()
override func awakeFromNib() {
super.awakeFromNib()
button.setImage(UIImage(named: "favUnselected"), for: .normal)
button.setImage(UIImage(named: "favSelected"), for: .selected)
}
【问题讨论】:
-
细胞被重复使用。重置
cellForItemAt中的状态。 -
@rmaddy 问题是我希望它保存 uibutton 正常状态的图像,如果它发生变化并且用户滚动回原始单元格。
-
没错。这就是为什么您需要将状态存储在数据模型中,并在每次
cellForItemAt中相应地重置单元格。 -
@rmaddy 我不完全确定该怎么做,当我在按下按钮后打印状态时,我得到: UIControlState(rawValue: 1)
-
在 cellForRowAt 方法中创建单元格时,请确保应选择哪个单元格的按钮。每个单元格。
标签: ios swift uicollectionview uicollectionviewcell