2016-07-07 25 views
1

私のプロジェクトのためにtableviewセルにボタンのように作成しようとしています。ボタンのようにクリックすると、色合いが赤に変わる必要があります。私はAlamofireを使用していますし、ユーザーが好きなら、それはウィッヒフィードが好きで、セルにされて返されます。クリックしたときのセルのボタンの色を変更する

let likerHash = data[indexPath.row]["liker_hash"] as? String 
if(likerHash == ""){ 
    cell.likeButton.tintColor = UIColor.blackColor() 
}else{ 
    cell.likeButton.tintColor = UIColor.redColor() 
} 

は、飼料用のボタンの色を設定します。しかし、好きなボタンをクリックすると色が変わってしまい、下にスクロールしてもう一度やり直してボタンの色が元に戻ります。 (もし私が下にスクロールすると色を保つことが好きではないデータを読み込んでいる場合)私はliker_hashの値を変更するtrideを持っていますが、それは私にエラーを与える:mutating method sent to immutable object

self.data[sender.tag]["liker_hash"] = "" 

マイdataタイプ[NSMutableDictionary]()からです。私のような値を変更することが抱き合わせています。どのように私は迅速な言語でそれを行うことができますか?

+0

は、その細胞を再利用するあなたのtableViewですか?あなたのスクロールを元に戻すときにボタンがリセットされる理由は、これが問題になるかもしれません。 –

+0

私は 'func tableView(tableView:UITableView、cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell { }を使っていました。cell = self.tableView.dequeueReusableCellWithIdentifier(" cell "、forIndexPath:indexPath)を! CustomCell} 'と呼びます。 @The_Curry_Man –

+0

私は答えを追加しました。役に立ったら教えてください –

答えて

0

dequeueReusableCellWithIdentifierを使用する主な機能は、セルが返されるたびにセルが再作成されることです。 追加したコードに基づいて、次回のtableViewのリロード時にどのセルが変更されたかを保存するためにlikeボタンを押したときに、データソースを編集しているとは思われません。

私が示唆したいのは、配列内のすべてのセルを保持していることです。あなたは5個の細胞を持っているはず、彼らの現在の状態を保持する配列を作成します。ユーザーはのようなボタンを選択した場合

var cellArr = ["Black", "Black", "Black", "Black", "Black"] 

その後、同様に右の色とこの配列を更新してください。あなたのcellForRowAtIndexPath関数で

var cellArr = ["Black", "Red", "Black", "Black", "Black"] 

そしてを:私は2番目の行を選択するのであれば、私はそれが好き更新

if cellArr[indexPath.row] == "Black"{ 
    cell.likeButton.tintColor = UIColor.blackColor() } 
else { 
    cell.likeButton.tintColor = UIColor.redColor() 
} 
+0

私はそれを試してみて返信します。私はあなたが意味することを理解し、それがうまくいくと思います。しかし、毎回セルを再認識する必要がなければ、どうすれば自分のコードを変更できますか? –

+0

「dequeueReusableCellWithIdentifier」がなくてもそれが当てはまりますか? –

+0

'dequeueReusableCellWithIdentifier'を使用するのが良い方法です。それはあなたのアプリがメモリリークなどを引き起こさないことを保証します。私はそれを使用しないと考えていません。 –

関連する問題