Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果单击,则更改单元格中的按钮颜色_Ios_Swift_Uitableview_Alamofire - Fatal编程技术网

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
中,我检查了这是黑色还是红色。就这些。感谢“咖喱人”的帮助。