我对collectionView
上的复选框问题感到困惑。
我已经为'复选框'创建了一个类组件:UIbutton
之后我使用了
使用'collectionview'所以当我点击某个checkbox
项
我发现另一个项目在检查之后:
如果我检查项目1的checkbox
,则另一项目6已经检查。
class CheckBox: UIButton {
// Images
let checkedImage = UIImage(named: "checkbox")! as UIImage
let uncheckedImage = UIImage(named: "uncheckbox")! as UIImage
// Bool property
var isChecked: Bool = false {
didSet{
if isChecked == true {
self.setImage(checkedImage, forState: .Normal)
} else if isChecked == false {
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 {
println(self)
if isChecked == true {
isChecked = false
} else if isChecked == false {
isChecked = true
}
}
}
}
extension TrackersController: UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dataSource.vehicles.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier,forIndexPath:indexPath) as! VehicleCell
let vehicles: [Vehicle] = dataSource.vehiclesInGroup(indexPath.section)
let vehicle = vehicles[indexPath.row]
cell.txt_mat.text = vehicle.name
cell.txt_imei.text = vehicle.imei
cell.check_veh.addTarget(self, action: "selectVeh:", forControlEvents: UIControlEvents.TouchUpInside)
cell.check_veh.tag = vehicle.id_tracker!.toInt()!
cell.check_veh.enabled = vehicle.subscription!
return cell
}
func selectVeh(button: CheckBox) {
if(button.isChecked){
vehIds.append(button.tag)
}else if(!button.isChecked){
var index = find(vehIds, button.tag)
vehIds.removeAtIndex(index!)
// JLToast.makeText(String(button.tag)).show()
}
}
答案 0 :(得分:0)
您应该将所选索引存储在一个数组中,稍后在cellForRowAtIndexPath
方法中,您需要检查数组中是否已存在indexPath
,或者不显示/隐藏复选框。
复选框的外观是由于重复使用单元格。每当细胞重新出现在屏幕上时,都会加载细胞的内容。因此,您需要在cellForRowAtIndex
方法中相应地更新内容。
答案 1 :(得分:0)
您需要在Vehicle模态类中使用一个bool变量(例如:isSelected)并在selectVeh方法中为该bool变量设置值,如下所示
s1 = sc(s2); // sc = string-converter