gpt4 book ai didi

swift - 为什么我在自定义单元格中的复选框在快速选择和滚动时显示不同的行为?

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

我有一个 xib View ,其中我使用了一个带有 customcell xib 的 tableView。在这个自定义单元格中,我有一个复选框按钮,其行为类似于使用自定义单元格进行选中和取消选中。但是,当我单击第一个单元格复选框作为第 9 行单元格、第 18 行单元格等第 9 行单元格的倍数时,..... 也被选中。在滚动复选框时,勾选选项在单元格之间发生变化。我不知道为什么会这样..??

我已将单元格 xib View 注册为:

override func viewDidLoad() {
super.viewDidLoad()
//Register custom cell
let nib = UINib(nibName: "CustomOneCell", bundle: nil)
AddOnTableView.registerNib(nib, forCellReuseIdentifier: "addoncell")
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ADDONITEMS.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:CustomOneCell = AddOnTableView.dequeueReusableCellWithIdentifier("addoncell") as! CustomOneCell
let item: AddOnItems = ADDONITEMS[indexPath.row]
cell.addOnName.text = item.name
cell.addOnPrice.text = "£\(item.price!)"


return cell
}

我为复选框添加了一个自定义类,如下所示:

var isCheckedAddOnGlobal = Bool()
class AddOnCheckBox: UIButton {


let checkedImage = UIImage(named: "checkboxredtick.png")! as UIImage
let unCheckedImage = UIImage(named:"checkbox untick.png")!as UIImage

//bool property
var ischecked:Bool = false{
didSet{
//print(ischecked)
if ischecked == true{
self.setImage(checkedImage, forState: .Normal)


}else{
self.setImage(unCheckedImage, forState: .Normal)
}
}
}

override func awakeFromNib() {
self.addTarget(self, action:#selector(CheckBox.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.ischecked = false
}

func buttonClicked(sender: UIButton) {

if (sender == self) {
if ischecked == true{
ischecked = false
isCheckedAddOnGlobal = false

}else{
ischecked = true
isCheckedAddOnGlobal = true

}

}

}
}

最佳答案

发生这种情况是因为您正在重用 TableViewCell,要解决您的问题,您可以尝试这样的操作,首先创建一个 Int 数组,为您提供选定的行并在 中使用该数组cellForRowAtIndexPath 方法。

var selectedItems = [Int]()

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:CustomOneCell = AddO nTableView.dequeueReusableCellWithIdentifier("addoncell") as! CustomOneCell
let item: AddOnItems = ADDONITEMS[indexPath.row]
cell.addOnName.text = item.name
cell.addOnPrice.text = "£\(item.price!)"
cell.checkBoxBtn.tag = indexPath.row
if (selectedItems.contains(indexPath.row)) {
cell.checkBoxBtn.setImage(UIImage(named:"checkbox untick.png"), forState: .Normal)
}
else {
cell.checkBoxBtn.setImage(UIImage(named: "checkboxredtick.png"), forState: .Normal)
}
cell.checkBoxBtn.addTarget(self, action:#selector(self.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
return cell
}

func buttonClicked(sender: UIButton) {
if (self.selectedItems.contains(sender.tag)) {
let index = self.selectedItems.indexOf(sender.tag)
self.selectedItems.removeAtIndex(index)
}
else {
self.selectedItems.append(sender.tag)
}
self.tableView.reloadData()
}

关于swift - 为什么我在自定义单元格中的复选框在快速选择和滚动时显示不同的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696585/

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