到目前为止,我正在尝试使用自定义单元格制作一个表格,到目前为止一切顺利,但我决定为me gusta
每个单元格添加一个按钮,按下按钮时只会更改其图像,所以我遇到的问题是:每次我按下按钮me gusta
是的,它会更改按钮的图像,但它会为按下按钮的单元格和同一列表中的其他单元格更改它,如下图所示:
图像中发生的情况是我按下顶部按钮但底部按钮也发生了变化(例如),我试图重用相同的单元格,dequeueReusableCellWithIdentifier
这是我的代码:
extension ViewController : UITableViewDataSource {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 8
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! DestinoTableViewCell
cell.btnCorazon.tag = indexPath.row
cell.btnCorazon.addTarget(self, action: #selector(changueButon), forControlEvents: .TouchUpInside)
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("select", indexPath.row)
}
func changueButon(sender: UIButton){
if(!self.isLove){
if let image = UIImage(named: "heart.png") {
sender.setImage(image, forState: .Normal)
isLove = true
}
}else{
if let image = UIImage(named: "fav.png") {
sender.setImage(image, forState: .Normal)
isLove = false
}
}
}
}
所以我的问题是:有没有办法解决这个问题?如果有,它是什么?
在
DestinoTableViewCell
创建一个协议如下:稍后,在您的类中,您声明了一个弱类型的属性,即委托。这是通过以下方式完成的:
一旦你有了这个,你必须使用委托。要做到这一点,一旦你按下按钮,在选择器内,在单元类中进行调用,执行以下操作:
在单元格类中实现单元格按钮操作很重要。
最后,在您
ViewController
的方法内部cellForRowAtIndexPath
,您分配委托并通过扩展 ViewController 来实现委托的方法。我希望它对你有所帮助。
一切顺利。
当您有一个带有部分的 TableView 时,该协议是否也可以工作?我将标签用于单个部分,它工作得很好,但是在添加部分时,我得到一个“索引超出范围”错误。有什么解决办法吗?
谢谢