您好我的应用中存在问题
我正在使用UITableView和自定义单元格。在每个细胞中,我有一个 复选框,当我检查它时,它将单元格的元素变为a 组。除了一个小问题外,一切都正常。
问题:
在我点击第一行时的图像中,第10行似乎正在显示 喜欢检查。图像已更改为已检查但实际上已完成 没有出现在我的设置中。
以下是代码的相关部分
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TblCell
cell.labelInCell.text = tableData[indexPath.row]//data.myFunc().myset[indexPath.row]
cell.checkBoxInCell.tag = indexPath.row
cell.checkBoxInCell.addTarget(self, action: Selector("yourCheckBoxClicked:"), forControlEvents: .TouchUpInside)
// cell.images.image = UIImage(named: tableData[indexPath.row])
// if images name is same as in tableData put it in front of label
return cell
}
func yourCheckBoxClicked(cbx:UIButton){
let picked = self.tableData[cbx.tag]
if choosenSet.contains(picked) {
choosenSet.remove(picked) // uncheck
} else {
choosenSet.insert(picked) // check
}
print(choosenSet)
}
部分中的行数 - >
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableData.count
}
复选框类 - >
class checkBox: UIButton {
//images
let checkedImage = UIImage(named: "button_checkboxFilled")
let uncheckedImage = UIImage(named: "button_checkboxEmpty")
// Bool Property
var isChecked : Bool = false {
didSet{
if isChecked == true{
self.setImage(checkedImage, forState: .Normal)
}else {
self.setImage(uncheckedImage, forState: .Normal)
}
}
}
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:" , forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked (sender:UIButton) {
if (sender == self) {
if isChecked == true {
isChecked = false
}else {
isChecked = true
}
}
}
}
答案 0 :(得分:0)
这是因为细胞重复使用。您应该将此行添加到func tableView(tableView:cellForRowAtIndexPath:)
方法:
cell.checkBoxInCell.isChecked = choosenSet.contains(tableData[indexPath.row])
答案 1 :(得分:0)
您的单元格可以重复使用,快速解决方案可以很好地工作,因为您的表格视图没有很多单元格:
let cell: TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell" + String(indexPath.row)) as! TblCell
如果你的tableView有很多行,那么#34; cell"标识符并更新每个cellForRowAtIndexPath
电话上的选择方式