gpt4 book ai didi

swift - 根据Model更新UIButton的图像

转载 作者:行者123 更新时间:2023-11-30 13:15:41 25 4
gpt4 key购买 nike

我有一个 UITableView,其中每个单元格从我的模型类获取其数据,该模型类是我的 TableViewController 类中的一个数组。每个单元格的模型在cellForRowAtIndexPath中设置。我的模型有一个“isFavorited”属性。我的自定义单元格类有一个带有星星图像的 UIButton。

如果model.isFavorited == false,则UIButton图像是一个灰色的星星。

如果model.sFavorited == true,UIButton 图像应更改为黄色星形。

到目前为止,我已经尝试过这样处理:

private let normal = UIImage(named: "star")
private let selection = UIImage(named: "star highlighted")

class CustomCell: UITableViewCell {
var model: Model? {
didSet{
favoriteButton.selected = (model?.isFavorite)!
}
}

@IBOutlet var favoriteButton: UIButton!

override func awakeFromNib() {
super.awakeFromNib()
favoriteButton.adjustsImageWhenHighlighted = true
favoriteButton.setImage(normal, forState: .Normal)
favoriteButton.setImage(selection, forState: .Highlighted)
favoriteButton.setImage(selection, forState: .Selected)
}

@IBAction func favoriteTapped(sender: AnyObject) {
//UPDATE THE MODEL
model?.isFavorite = !(model?.isFavorite)!
}

}

此代码成功地将星星从灰色更改为黄色,反之亦然,这要归功于调用 didSet 使用 (model?.isFavorite) 中的值更新 favoriteButton.selected bool 值!

但是,当我在表格 View 中滚动得足够远,并尝试返回到我喜欢的特定单元格时,该图像将重新显示为不喜欢的图像(灰色星形而不是黄色星形)。

如果当我点击按钮时我的模型正在更新,并且 UIButton 的图像由于此更改而在 didSet 期间进行了调整,那么为什么当滚动回此单元格时它会恢复到默认状态?

编辑:我的代码在 cellForRowAtIndexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CustomCell
cell.model = modelArray[indexPath.row]
return cell
}

最佳答案

基本上,您可以使用基于点击设置的自定义图像对 UIButton 进行子类化。我遇到了同样的问题并使用以下方法解决了它:

class FavioriteButton: UIButton {
//Images
let normalImage = UIImage(named: "star")! as UIImage
let selectedImage = UIImage(named: "star_highlighted")! as UIImage

//Bool property
var isSelected: Bool = false {
didSet {
if isSelected == true {
self.setImage(normalImage, forState: .Normal)
}else{
self.setImage(selectedImage, forState: .Normal)
}
}
}

override func awakeFromNib() {
super.awakeFromNib()
self.addTarget(self, action: #selector(buttonClicked(_:)), forControlEvents: .TouchUpInside)
self.isSelected = false
}

func buttonClicked(sender: UIButton) {
if sender == self {
if isSelected == true {
isSelected = false
}else{
isSelected = true
}
}
}
}

希望对您有帮助。

关于swift - 根据Model更新UIButton的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com