gpt4 book ai didi

ios - 无法控制单击时单元格的按钮图像变化

转载 作者:行者123 更新时间:2023-11-30 13:49:31 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的应用程序,其中 TableView 中的每个单元格都有一个心形按钮。如果我点击心形按钮,它应该被填满。不幸的是,每次我点击它时,其他单元格中的其他心也会被填满。我发现这是由于细胞回收造成的。我尝试了很多不同的方法来尝试解决这个问题,但不确定确切的过程是什么。这是该应用程序的代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell:heartcell = tableView.dequeueReusableCellWithIdentifier("heart") as! heartcell

cell.heartButton.tag = indexPath.row

cell.heartButton.setImage(UIImage(named: "heartsUnfillled"), forState: UIControlState.Normal)
cell.heartButton.setImage(UIImage(named: "heartsFilled"), forState: UIControlState.Selected)

cell.heartButton.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

return cell
}

func buttonClicked(sender:UIButton)
{
let ip = NSIndexPath(forRow: sender.tag, inSection: 0)
let cell = someTB.cellForRowAtIndexPath(ip) as! heartcell
cell.heartButton.selected = !cell.heartButton.selected

}

显然,细胞正在被回收,但这是行不通的。我尝试将单元格存储在一个数组中,将它们各自的索引存储在一个数组中,但无论如何我仍然遇到同样的问题,我无法控制被填充的心。有人知道如何解决这个问题吗?谢谢!

最佳答案

你应该声明一个集合:

var filledHeartSet = Set<NSIndexPath>()

并在代码中使用它,如下所示:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell:heartcell = tableView.dequeueReusableCellWithIdentifier("heart") as! heartcell

cell.heartButton.tag = indexPath.row

cell.heartButton.setImage(UIImage(named: "heartsUnfillled"), forState: UIControlState.Normal)
cell.heartButton.setImage(UIImage(named: "heartsFilled"), forState: UIControlState.Selected)

cell.heartButton.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

// set current state for heart button
cell.heartButton.selected = filledHeartSet.contains(indexPath)

return cell
}

func buttonClicked(sender:UIButton)
{
let ip = NSIndexPath(forRow: sender.tag, inSection: 0)

// only store filled heart indexPath
if filledHeartSet.contains(ip) {
filledHeartSet.remove(ip)
} else {
filledHeartSet.insert(ip)
}

let cell = someTB.cellForRowAtIndexPath(ip) as! heartcell
cell.heartButton.selected = !cell.heartButton.selected
}

关于ios - 无法控制单击时单元格的按钮图像变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com