Ios 如果单击,则更改单元格中的按钮颜色
我正在尝试为我的项目在Ios 如果单击,则更改单元格中的按钮颜色,ios,swift,uitableview,alamofire,Ios,Swift,Uitableview,Alamofire,我正在尝试为我的项目在tableview单元格中创建like按钮。如果单击了like按钮,则必须将色调颜色更改为红色。我正在使用Alamofire,如果用户喜欢,它将返回wich feed is like和in cell: let likerHash = data[indexPath.row]["liker_hash"] as? String if(likerHash == ""){ cell.likeButton.tintColor = UIColor.blackColor() }els
tableview
单元格中创建like按钮。如果单击了like按钮,则必须将色调颜色更改为红色。我正在使用Alamofire,如果用户喜欢,它将返回wich feed is like和in cell:
let likerHash = data[indexPath.row]["liker_hash"] as? String
if(likerHash == ""){
cell.likeButton.tintColor = UIColor.blackColor()
}else{
cell.likeButton.tintColor = UIColor.redColor()
}
将设置提要按钮的颜色。但若我点击一个按钮来喜欢它,若它不喜欢它,它会改变颜色,当我向下滚动并再次返回时,按钮的颜色会再次变为上一个。(如果加载数据时不喜欢,向下滚动时会保持颜色。)我有tride更改liker_hash
的值,但它给了我一个错误:发送到不可变对象的mutating method
。我想改变价值观,比如:
self.data[sender.tag]["liker_hash"] = ""
我的
数据
来自类型[NSMutableDictionary]()
。你知道如何使用swift语言吗?使用dequeueReusableCellWithIdentifier的主要特点是每次返回时都会重新创建单元格。
根据您添加的代码,当用户点击like按钮保存下一次重新加载tableView时已更改的单元格时,我不相信您正在编辑数据源
我建议把所有的细胞都放在一个阵列里。假设有5个单元格,创建一个保存其当前状态的数组:
var cellArr = ["Black", "Black", "Black", "Black", "Black"]
然后,如果用户选择like按钮,请确保使用正确的颜色更新此数组。因此,如果我选择第二行,我会像这样更新它:
var cellArr = ["Black", "Red", "Black", "Black", "Black"]
然后在cellForRowAtIndexPath函数中:
if cellArr[indexPath.row] == "Black"{
cell.likeButton.tintColor = UIColor.blackColor() }
else {
cell.likeButton.tintColor = UIColor.redColor()
}
使用dequeueReusableCellWithIdentifier的主要功能是,每次返回单元格时都会重新创建该单元格。 根据您添加的代码,当用户点击like按钮保存下一次重新加载tableView时已更改的单元格时,我不相信您正在编辑数据源 我建议把所有的细胞都放在一个阵列里。假设有5个单元格,创建一个保存其当前状态的数组:
var cellArr = ["Black", "Black", "Black", "Black", "Black"]
然后,如果用户选择like按钮,请确保使用正确的颜色更新此数组。因此,如果我选择第二行,我会像这样更新它:
var cellArr = ["Black", "Red", "Black", "Black", "Black"]
然后在cellForRowAtIndexPath函数中:
if cellArr[indexPath.row] == "Black"{
cell.likeButton.tintColor = UIColor.blackColor() }
else {
cell.likeButton.tintColor = UIColor.redColor()
}
您的tableView是否正在重用其单元格?这可能就是为什么在您的滚动返回时按钮会重置的问题。我使用
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableViewCell{let cell=self.tableView.dequeueReusableCellWithIdentifier(“cell”,forindepath:indepath)as!CustomCell}
@咖喱人补充了一个答案。让我知道它是否有助于您的tableView重用其单元格?这可能就是为什么在您的滚动返回时按钮会重置的问题。我使用func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableViewCell{let cell=self.tableView.dequeueReusableCellWithIdentifier(“cell”,forindepath:indepath)as!CustomCell}
@咖喱人补充了一个答案。让我知道它是否有用。我明天会试试,然后在那里回复。我理解你的意思,我认为这会奏效。但是,如果我不需要每次都重新创建单元格,我如何才能更改代码来实现这一点?如果我不使用“dequeueReusableCellWithIdentifier”,这是真的吗?使用“dequeueReusableCellWithIdentifier”是一个很好的实践。它确保你的应用程序不会导致内存泄漏等。我不会考虑不使用它。谢谢。然后我将创建一个新数组,并将所有单元格按钮颜色保存在该数组中,然后如果其中一些颜色发生更改,我将在数组中更新它。我明天会试试,然后回复。谢谢你的帮助,谢谢你。它工作得很好。如果有人搜索答案:首先我创建了如下数组:var likerray:[String]=[]代码>然后我将所有颜色添加到数组中。在cellforrowatinexpath
中,我检查了这是黑色还是红色。就这些。感谢@The_Curry_Man的帮助。我将在明天尝试并回复。我理解你的意思,我认为这会奏效。但是,如果我不需要每次都重新创建单元格,我如何才能更改代码来实现这一点?如果我不使用“dequeueReusableCellWithIdentifier”,这是真的吗?使用“dequeueReusableCellWithIdentifier”是一个很好的实践。它确保你的应用程序不会导致内存泄漏等。我不会考虑不使用它。谢谢。然后我将创建一个新数组,并将所有单元格按钮颜色保存在该数组中,然后如果其中一些颜色发生更改,我将在数组中更新它。我明天会试试,然后回复。谢谢你的帮助,谢谢你。它工作得很好。如果有人搜索答案:首先我创建了如下数组:var likerray:[String]=[]代码>然后我将所有颜色添加到数组中。在cellforrowatinexpath
中,我检查了这是黑色还是红色。就这些。感谢“咖喱人”的帮助。