如果单击,则更改单元格中的按钮颜色

时间:2016-07-07 20:11:03

标签: ios swift uitableview alamofire

我正在为我的项目在tableview单元格中创建类似按钮。如果点击了按钮,则必须将色调颜色更改为红色。我正在使用Alamofire,如果用户喜欢它,则返回喜欢的饲料,并且在细胞中:

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

将为Feed设置按钮的颜色。但是,如果我单击一个按钮,如果它不喜欢它会改变颜色,当我向下滚动并再次返回按钮颜色将再次更改为以前。 (如果在加载数据时它不受欢迎,当我向下滚动时它会保持颜色。)我试图改变liker_hash的值,但它给了我一个错误:mutating method sent to immutable object。我想改变价值,如:

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

我的data来自[NSMutableDictionary]()类型。知道我怎么能用迅捷的语言来做呢?

1 个答案:

答案 0 :(得分:0)

使用dequeueReusableCellWithIdentifier的主要功能是每次返回时都会重新创建单元格。 根据您添加的代码,当用户点击类似按钮以保存下次tableView重新加载时已更改的单元格时,我不相信您正在编辑数据源。

我建议将所有单元格保存在一个数组中。假设你有5个单元格,创建一个保持当前状态的数组:

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

然后,如果用户选择了类似按钮,请确保使用正确的颜色更新此数组。因此,如果我选择第二行,我会更新它:

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

然后在你的cellForRowAtIndexPath函数中:

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