gpt4 book ai didi

swift - 在 Swift 中更新按钮事件?

转载 作者:行者123 更新时间:2023-11-28 06:07:53 25 4
gpt4 key购买 nike

我正在创建一个 list 应用程序并尝试更新按钮事件,该事件在单击后自行设置图像。

这是我的代码:

protocol CustomeCellDelegate { 
func cell(cell: UITableViewCell, updateTheButton button: UIButton)
}

class Cells: UITableViewCell, UITextFieldDelegate {

@IBOutlet weak var checkBox: UIButton!
var buttonPressed = true
@IBAction func checkBoxAction(_ sender: UIButton) {
if buttonPressed {
sender.setImage(UIImage(named: "checkBoxB"), for: UIControlState.normal)
buttonPressed = false
} else {
sender.setImage(UIImage(named:""), for: UIControlState.normal)
buttonPressed = true
}
}
@objc func recordButtonImage(_ button: UIButton) {
cellDelegate?.cell(cell: self, updateTheButton: button) // cell notify the button that touched.
}
override func awakeFromNib() {
checkBox.addTarget(self, action: #selector(recordButtonImage(_:)), for: UIControlEvents.touchUpInside)
}
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, CustomeCellDelegate {

@IBOutlet weak var tableView: UITableView!

var myImages: [UIImage?]!

override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
myImages = Array(repeatElement(nil, count: 50))
let nib = UINib(nibName: "Cells", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "Cells")
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 50
}

internal func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "theCells") as? Cells
cell?.theTextField.delegate = self
cell?.cellDelegate = self
cell?.checkBox.setImage(myImages[indexPath.row], for: UIControlState.normal)

return cell!
}

// This function from protocol and it helps to update button images.
func cell(cell: UITableViewCell, updateTheButton button: UIButton) {
print("Delegate method Update Button Images.")
if let indexPath = tableView.indexPath(for: cell), let buttonImage = button.image(for: UIControlState.normal) {
myImages[indexPath.row] = buttonImage
}
}

我想在选中未选中 后更新设置图像的按钮 的两个事件。因此,我的 TableView 可以使 Reusable Cell 出列并更新这些事件。

但结果只是一个按钮事件被选中更新而不是未被选中的事件。选中的按钮仍然会重复我取消选中它所做的任何操作。

最佳答案

我认为你不需要 recordButtonImage 方法,你应该从按钮点击操作调用委托(delegate)方法,即 checkBoxAction,就像下面一样

class Cells: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var checkBox: UIButton!
var buttonPressed = true
@IBAction func checkBoxAction(_ sender: UIButton) {
if buttonPressed {
sender.setImage(UIImage(named: "checkBoxB"), for: UIControlState.normal)
buttonPressed = false
} else {
sender.setImage(UIImage(named:""), for: UIControlState.normal)
buttonPressed = true
}
// cell notify the button that touched.
cellDelegate?.cell(cell: self, updateTheButton: button)
}
}

还有您的数据源方法,不会告诉单元格按钮是否被按下。它只设置图像但不设置变量 buttonPressed

 internal func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "theCells") as? Cells
cell?.theTextField.delegate = self
cell?.cellDelegate = self
cell?.checkBox.setImage(myImages[indexPath.row], for: UIControlState.normal)

return cell!
}

关于swift - 在 Swift 中更新按钮事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712190/

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