Like 按钮状态未保存
Posted
技术标签:
【中文标题】Like 按钮状态未保存【英文标题】:Like button state not saved 【发布时间】:2018-01-01 17:03:38 【问题描述】:在 Swift 3 中,我通过 json 从 api 获取数据并检查我的自定义单元格中是否喜欢帖子:
let cell = self.tableView.dequeueReusableCell(withIdentifier: "Feedcell", for: indexPath) as! FruitTableViewCell
//getting the hero for the specified position
let hero: List_Feed
hero = heroes[indexPath.row]
if(hero.mylike=="liked")
cell.btnLike.setImage(UIImage(named: "liked"), for: .normal)
cell.btnLike.addTarget(self, action:#selector(handleDislikes(sender:)), for: .touchUpInside)
else
cell.btnLike.setImage(UIImage(named: "unliked"), for: .normal)
cell.btnLike.addTarget(self, action:#selector(handleLikes(sender:)), for: .touchUpInside)
这里是 handleDislikes 和 handleLikes 函数:
func handleLikes(sender: AnyObject)
let likeid = sender.tag / 100
let row = sender.tag % 100
print(likeid)
print(row)
let m1 = sender.titleLabel??.text
let m2 = Int(m1!)
let m3 = m2!+1
let m4 = String(m3)
sender.setTitle(m4, for: .normal)
sender.setImage(UIImage(named: "liked"), for: .normal)
sender.removeTarget(nil, action: nil, for: .allEvents)
sender.addTarget(self, action:#selector(handleDislikes(sender:)), for: .touchUpInside)
func handleDislikes(sender: AnyObject)
let likeid = sender.tag / 100
let row = sender.tag % 100
print(likeid)
print(row)
let m1 = sender.titleLabel??.text
let m2 = Int(m1!)
let m3 = m2!-1
let m4 = String(m3)
sender.setTitle(m4, for: .normal)
sender.setImage(UIImage(named: "unliked"), for: .normal)
sender.removeTarget(nil, action: nil, for: .allEvents)
sender.addTarget(self, action:#selector(handleLikes(sender:)), for: .touchUpInside)
因此,当我点击喜欢按钮时,它“喜欢它”并且按钮的值变为 value+1。然后,当我向下滚动并再次向上滚动到这个喜欢的帖子(自定义单元格)时,它显示 按钮未按下。为什么会这样,我的朋友们?
【问题讨论】:
您的handleLikes
和handleDislikes
方法没有任何用处。他们需要更新您的 heroes
数组中的数据。
@mr-jo : 您的 handleLikes 和 handleDislikes 只是暂时反映更改,以便保持更改,您应该修改相应英雄对象的 myLike 属性
@rmaddy 谢谢你的回复!现在我知道该怎么做了。请写下您的评论作为答案。
【参考方案1】:
您遇到的行为来自 ios 处理单元格的方式。为了避免在单元格滚动出视图而其他单元格在 iOS 中滚动时重新分配和重新分配内存,重用了超出范围的 UITableViewCell
s 实例;所以你不能依赖一个单元格会保存一些数据这一事实,因为当再次显示同一个单元格时,它可能会显示为 UITableViewCell
的不同实例。
正如@rmaddy 在评论中指出的,您必须将点赞数保存在heroes
变量中,以便在下次调用tableView(_,cellForRowAtIndexPath:_)
时正确显示。
【讨论】:
以上是关于Like 按钮状态未保存的主要内容,如果未能解决你的问题,请参考以下文章
Laravel / AJAX Like 按钮错误:请求失败,状态码 404