2016-07-07 14 views
0

私は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 
} 
+0

私はここで何が起こっているのか知っています。あなたは 'cellForRowAtIndexPath'からあなたのコードを投稿できますか?コードで答えることができますか? – rigdonmr

+0

コードの最新記事を参照してください。 – iOShepherd

+0

ええ、今、私の頭を傷つける。実際に私にはうまく見えます。最初のステップは、どこから問題が発生しているのかを理解することです。そのdidSetコールバックにprintステートメントを入れてmodel.isFavorite値を出力します。ところで、 'model!.isFavorite'は'(model?.Fishite)! 'ではなく、後者は – rigdonmr

答えて

0

での私のコードは基本的にあなたがタップに基づいて設定されたカスタムイメージを持つUIButtonをサブクラス化することができます。私は同じ問題を抱えており、以下を使用して解決しました。

希望します。

+0

と矛盾しています。今、私がtableViewをスクロールすると、同じ再利用セルを共有する他のセルには、強調表示された星があります。上下にスクロールすると星がランダムに変わります。 – iOShepherd

+0

あなたのセルに 'isSelected'を正しく設定する必要があります。 – Santosh

+0

まだ動作しません – iOShepherd

関連する問題