gpt4 book ai didi

ios - 单击更改行按钮图像源?

转载 作者:搜寻专家 更新时间:2023-11-01 06:21:24 25 4
gpt4 key购买 nike

我正在尝试实现通过单击行来更改行的按钮图像源的代码。这是用于 list TableView 。 TableView 分为多个部分。不确定我做错了什么:

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//change tickBtn's image src to tick.png
print("in didselect")
if let cell = tableView.cellForRowAtIndexPath(indexPath) as? CheckListCell {
let tickedImg = UIImage(named: "tick.png")
cell.tickBtn.setImage(tickedImg, forState: UIControlState.Selected)
//cell.tickBtn.alpha = 0

}
else{
print("in the else of didSelect")
}

}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
//change tickBtn's image src to unTicked.png
print("in didDeselect")
if let cell = tableView.cellForRowAtIndexPath(indexPath) as? CheckListCell{
let tickedImg = UIImage(named: "unTicked.png")
cell.tickBtn.setImage(tickedImg, forState: UIControlState.Selected)
//cell.tickBtn.alpha = 1
}
else{
print("in the else of didDeSelect")
}

}

我正在获取 didSelect 和 didDeSelect 的日志,但图像源没有改变。一定与我访问单元格的方式有关,我需要考虑该部分吗?

更新:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//change tickBtn's image src to tick.png
let cell = tableView.cellForRowAtIndexPath(indexPath) as? CheckListCell
cell!.cellTickedImage = UIImage(named: "tick.png")
self.checkListTableView.beginUpdates()
self.checkListTableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
self.checkListTableView.endUpdates()

}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as? CheckListCell
cell!.cellTickedImage = UIImage(named: "unTicked.png")
self.checkListTableView.beginUpdates()
self.checkListTableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
self.checkListTableView.endUpdates()
}

class CheckListCell : UITableViewCell {

@IBOutlet weak var tickBtn: UIButton!
@IBOutlet weak var taskLbl: UILabel!
var cellTickedImage : UIImage?

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = checkListTableView.dequeueReusableCellWithIdentifier("CheckListCell", forIndexPath: indexPath) as! CheckListCell

cell.taskLbl?.text = checkListData[indexPath.section][indexPath.row]
cell.tickBtn.setImage(cell.cellTickedImage, forState: UIControlState.Normal)
cell.tickBtn.setImage(cell.cellTickedImage, forState: UIControlState.Highlighted)

//cell.tickBtn.titleLabel!.text = ""

return cell
}

最佳答案

试试这个:

第 1 步:didSelectRowAtIndexPath 中更新驱动单元格图像的模型:

self.cellTickedImage = UIImage(named: "tick.png”)

第 2 步:didSelectRowAtIndexPath 中重新加载单元格以查看更改:

self.tableView.beginUpdates()
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
self.tableView.endUpdates()

第 3 步:didDeselectRowAtIndexPath 中更新驱动单元格图像的模型:

self.cellTickedImage = UIImage(named: "unTicked.png”)

第 4 步:didDeselectRowAtIndexPath 中重新加载单元格以查看更改:

self.tableView.beginUpdates()
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
self.tableView.endUpdates()

第 5 步:cellForRowAtIndexPath 中正确设置单元格图像:

cell.tickBtn.setImage(self.cellTickedImage, forState: UIControlState.Normal)
cell.tickBtn.setImage(self.cellTickedImage, forState: UIControlState.Highlighted)

编辑:在聊天中发布与 OP 的讨论 - 讨论中的一些假设

  1. 两个单元格上不得有相同的文本。
  2. 点击一次显示一张图片,点击第二次显示第二张图片。

考虑到这一点,这里是修复的高级算法:

  1. 创建一个全局字典 checkListDict,键作为单元格文本,值作为图像状态标志。所有单元格文本的初始设置值为 0。将 1 视为 tick.png,将 0 视为 unTicked.png
  2. didSelectRowAtIndexPath 中像这样更新标志:

->

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
//change tickBtn's image src to tick.png
let cell = tableView.cellForRowAtIndexPath(indexPath) as? CheckListCell
let selectedCellText = (cell!.taskLbl?.text)!

if checkListDict[selectedCellText] == 0 {
checkListDict[selectedCellText] = 1
}
else{
checkListDict[selectedCellText] = 0
}

self.checkListTableView.beginUpdates()
self.checkListTableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
self.checkListTableView.endUpdates()
}
  1. 最后,在 cellForRowAtIndexPath 中使用更新后的模型,如下所示:

->

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = checkListTableView.dequeueReusableCellWithIdentifier("CheckListCell", forIndexPath: indexPath) as! CheckListCell

let selectedCellText = checkListData[indexPath.section][indexPath.row]

cell.taskLbl?.text = selectedCellText
let cellImage = checkListDict[selectedCellText] == 0 ? UIImage(named: "unTicked.png") : UIImage(named:"tick.png")


cell.tickBtn.setImage(cellImage, forState: UIControlState.Normal)
cell.tickBtn.setImage(cellImage, forState: UIControlState.Highlighted)

return cell
}

关于ios - 单击更改行按钮图像源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33411241/

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