簡體   English   中英

BEMcheckbox在表視圖中快速檢查/取消檢查問題3

[英]BEMcheckbox check/uncheck issue in tableview in swift 3

我正在使用BEMcheckbox。 當我單擊它時,它會設置動畫並顯示一個隱藏的標簽,但是當我滾動表視圖時,我的復選框會自動取消選中。 當我滾動時,它也不會自動選中任何復選框。 我想要的是當我滾動表視圖時,選中的復選框保持選中狀態,而未選中的復選框保持未選中狀態。 我的代碼如下。 我的視圖控制器類。

class markAttendanceViewController: UIViewController , UITableViewDataSource , UITableViewDelegate{

@IBAction func selectall(_ sender: UIButton) {

    sender.isSelected = !sender.isSelected
    if sender.isSelected {
        checkImageView.isHidden = false
        checkboxLabel.layer.borderColor = UIColor.blue.cgColor
    } else{
        checkImageView.isHidden = true
        checkboxLabel.layer.borderColor = UIColor.lightGray.cgColor
    }

    table.reloadData()
}

@IBOutlet weak var checkImageView: UIImageView!
@IBOutlet weak var checkboxLabel: UILabel!
@IBAction func backToAttendanceView(_ sender: AnyObject) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    var controller: UIViewController!
    controller = storyboard.instantiateViewController(withIdentifier: "listViewController") as! listViewController
    (controller as! listViewController).receivedString = "Mark Attendance"
    let navController = UINavigationController(rootViewController: controller)
    let revealController = self.revealViewController() as! RevealViewController
    revealController.rightViewController = navController
    revealController.rightViewController.view.addGestureRecognizer(revealController.panGestureRecognizer())
    self.present(revealController, animated: true, completion: nil)

}



@IBOutlet weak var table: UITableView!
@IBOutlet weak var button: UIButton!

 //var items:Array = [String]()
override func viewDidLoad() {
    super.viewDidLoad()
   self.navigationController?.setNavigationBarHidden(true, animated: true)
    checkboxLabel.layer.borderWidth = 1
    checkboxLabel.layer.borderColor = UIColor.lightGray.cgColor

   // items = ["Dashboard","Mark Attendance","Update Attendance","delete Attendance","Time Table","Academic Calendar","Reports","About Us","Logout","rbivwe","whefo","ewsow","webkgwo","wbiebfkwbei","ejwvabei","vdkgdvkJDB"]

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



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

}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "attendanceTableViewCell") as! attendanceTableViewCell
   // cell.studentname?.text = items[indexPath.row]
    cell.serialnumber?.text = "\(indexPath.row + 1)"

    if button.isSelected {
        cell.present.isHidden = false
        cell.box.setOn(true, animated: true)
    }    else
    {
        cell.box.setOn(false, animated: false)
        cell.present.isHidden = true
    }

return cell

}
}

我的tableview單元格類。

class attendanceTableViewCell: UITableViewCell,BEMCheckBoxDelegate {


@IBOutlet weak var present: UILabel!
@IBOutlet weak var box: BEMCheckBox!
@IBOutlet weak var studentname: UILabel!
@IBOutlet weak var serialnumber: UILabel!
@IBOutlet weak var view: UIView!
override func awakeFromNib() {
    box.delegate = self


}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    view.layer.masksToBounds = false
    view.layer.cornerRadius = 2.0
    view.layer.shadowOffset = CGSize(width: -1, height: 1)
    view.layer.shadowOpacity = 0.2
    // Configure the view for the selected state
}
func didTap(_ checkBox: BEMCheckBox) {
    if box.on {

        present.isHidden = false
    } else {

        present.isHidden = true
    }
}
}

如果有人仍然需要解決方案。 我得到它的唯一方法是每次單擊它都添加checkBox狀態,然后在cellForRowAt函數中檢查狀態。 我的建議:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, BEMCheckBoxDelegate {

//...
var checkboxesState: [Int: Bool] = [:]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = mainTableView.dequeueReusableCell(withIdentifier: "productCell", for: indexPath) as! ProductCell
    cell.checkBox.delegate = self
    cell.checkBox.tag = indexPath.row
    if let isOn = checkboxesState[indexPath.row] {
        if isOn {
            cell.checkBox.on = true
        } else {
            cell.checkBox.on = false
        }
    } else {
        cell.checkBox.on = false
    }
    //... other code
    return cell
 }
func didTap(_ checkBox: BEMCheckBox) {
    checkboxesState.updateValue(checkBox.on, forKey: checkBox.tag)
}
//...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM