ios - 单击时更改单元格中的按钮颜色

标签 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()
}

将设置供稿按钮的颜色。但是,如果我单击一个按钮来喜欢它,如果它不喜欢它会改变颜色,当我向下滚动并再次返回时,按钮颜色将再次变为以前的颜色。 (如果在加载数据时不喜欢它,当我向下滚动时它会保持颜色。)我尝试更改 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/

相关文章:

ios - 从其 UIViewController 中的按钮关闭 UIPopoverController

ios - 每个目标都有不同版本的文件的 Xcode 项目?

xcode - 以毫秒为单位的 Swift 定时器

ios - 不初始化引用枚举类型对象

swift - 关于核心数据保存对象的主要实体与次要实体

iphone - 如何知道哪个tableview单元格的文本字段改变了它的内容

ios - SwiftUI Picker 在 Xcode 11 beta 7 中不再工作

ios - 向 UITextView 内的 UIImage 添加边框

iphone - 更改 UITableView Customcell 的高度

iphone - 如何使用 PhoneGap 在 iPhone 应用程序中添加 UITableview?