私はTableViewControllerクラスの配列であるモデルクラスから各セルのデータを取得するUITableViewを持っています。各セルのモデルはcellForRowAtIndexPathに設定されています。私のモデルは "isFavorited"プロパティを持っています。私のカスタムセルクラスは、星のイメージを持つUIButtonを持っています。モデルに基づいて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)!
}
}
このコードが正常値でfavoriteButton.selected
boolean値を更新するために呼び出されるdidSetに黄色に灰色とその逆のおかげからスターを変更します(model?.isFavorite)!
から。
私はテーブルビューで十分にスクロールし、私がお気に入りの特定のセルに戻ろうとすると、イメージは不快(黄色の星の代わりに灰色の星)に再現されます。
ボタンをタップしたときにモデルが更新され、この変更の結果としてdidSet中にUIButtonの画像が調整された場合、このセルにスクロールすると元の状態に戻ります。
EDIT: 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
}
私はここで何が起こっているのか知っています。あなたは 'cellForRowAtIndexPath'からあなたのコードを投稿できますか?コードで答えることができますか? – rigdonmr
コードの最新記事を参照してください。 – iOShepherd
ええ、今、私の頭を傷つける。実際に私にはうまく見えます。最初のステップは、どこから問題が発生しているのかを理解することです。そのdidSetコールバックにprintステートメントを入れてmodel.isFavorite値を出力します。ところで、 'model!.isFavorite'は'(model?.Fishite)! 'ではなく、後者は – rigdonmr