我正在为我的项目在 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
的值,但它给了我一个错误:mutating method sent to immutable object
。我想像这样改变值(value):
self.data[sender.tag]["liker_hash"] = ""
我的数据
来自类型[NSMutableDictionary]()
。知道如何用 Swift 语言做到这一点吗?
最佳答案
使用 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()
}
关于ios - 单击时更改单元格中的按钮颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38254428/