【问题标题】:Changing button color in cell if clicked如果单击,更改单元格中的按钮颜色
【发布时间】:2016-11-10 07:13:11
【问题描述】:

我正在尝试在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。我想改变价值,比如:

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

我的data 来自[NSMutableDictionary]() 类型。知道如何用 swift 语言做到这一点吗?

【问题讨论】:

  • 您的 tableView 是否重用了它的单元格?这可能是为什么当您向上滚动时按钮会重置的问题。
  • 我使用func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell} 做到了。 @The_Curry_Man
  • 我添加了一个答案。让我知道是否有帮助

标签: ios swift uitableview alamofire


【解决方案1】:

使用 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()
}

【讨论】:

  • 我会在明天尝试并在那里回复。我明白你的意思,我认为它会起作用。但是如果我不需要每次都重新创建单元格,我该如何更改我的代码来做到这一点?
  • 如果我没有'dequeueReusableCellWithIdentifier',那是真的吗?
  • 使用“dequeueReusableCellWithIdentifier”是一种很好的做法。它确保您的应用不会导致内存泄漏等。我不会考虑不使用它。
  • 啊,谢谢。然后我将创建一个新数组并将所有单元格按钮颜色保存在那里,然后如果其中一些会更改,我将在数组中更新它。我明天试试,然后回复。感谢您的帮助。
  • 谢谢伙计。它工作完美。如果有人搜索答案:起初我创建了这样的数组:var likeArray: [String] = []; 然后我将所有颜色添加到我的数组中。在cellForRowAtIndexPath 中,我检查了这个颜色是黑色还是红色。就这样。感谢@The_Curry_Man 的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2021-07-07
  • 2018-02-08
相关资源
最近更新 更多