ios - 带有复选框的交互式 TableView 标题

标签 ios swift uitableview checkbox sectionheader

我设计了 tableview 的标题,它通过更改图像的按钮制成的复选框进行交互。当我单击一个复选框时,它会被正确选中和取消选中。

我想要的是当我单击复选框时,如果它被选中,则两个复选框的其余部分应该自动取消选中。下面是代码。

   func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let identifierHeader:String = "SavedCallHeader"

    let  headerCell = tableView.dequeueReusableCell(withIdentifier: identifierHeader) as! SavedCallHeader




    headerCell.checkBox_PlannedisOn = checkBox_PlannedisOn
    headerCell.checkBox_unPlannedisOn = checkBox_unPlannedisOn
    headerCell.checkBox_BothisOn = checkBox_BothisOn

    headerCell.callBackForReload = { [weak self] (type,isCalled) -> Void in
        print("is called Planned = \(type)")
        print("is called Planned = \(isCalled)")

        if type == "Planned"{
            //Planned CallBack
            if isCalled == true {
                 print("Planned selected")
                self?.fetchPlannedData()
                self?.tableView.reloadData()


            } else {

                self?.DeSelect()
                self?.tableView.reloadData()
                print("Planned Not selected")
            }
            self?.checkBox_PlannedisOn = isCalled
        }else if type == "UnPlanned"{
            //UnPlanned CallBack 
            if isCalled == true {
                print("UnPlanned Selected")
                self?.fetchUnPlannedData()
                self?.tableView.reloadData()

            } else {
                self?.DeSelect()
                self?.tableView.reloadData()
                print("UnPlanned Not selected")
            }
            self?.checkBox_unPlannedisOn = isCalled
        }else{ 
            //Both CallBack 
            if isCalled == true { 
                print("Both Selected")
                self?.fetchDate()
                self?.tableView.reloadData()

            } else {
                 self?.DeSelect()
                 self?.tableView.reloadData()
                print("both Not selected")
            }
             self?.checkBox_BothisOn = isCalled
        } 

    }

    return headerCell

}

这是自定义头类

   class SavedCallHeader : UITableViewCell{

    var callBackForReloadPlanned : ((Bool) -> ())?
    var callBackForReloadBoth : ((Bool) -> ())?
    var callBackForReloadUnPlanned : ((Bool) -> ())?

    var NameOfOnStatus : ((String) -> ())?

    var AnyOneIsOn:Bool = true

    var callBackForReload : ((String,Bool) -> ())?

   // var checkBox_PlannedisOn:Bool = false
   // var checkBox_BothisOn:Bool = true
   // var checkBox_unPlannedisOn:Bool = false

    let defaults = UserDefaults.standard

    @IBOutlet weak var PlannedBoxBtn: UIButton!
    @IBOutlet weak var BothBoxBtn: UIButton!
    @IBOutlet weak var unPlannedBoxBtn: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    var checkBox_PlannedisOn:Bool = false {
        didSet{
            self.PlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            if checkBox_PlannedisOn{
                self.PlannedBoxBtn.setImage(UIImage(named: "Checked Checkbox-26.png"), for: UIControlState.normal)
              //  self.BothBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
               //  self.unPlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            }
        }
    }

    var checkBox_BothisOn:Bool = false {
        didSet{
            self.BothBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            if checkBox_BothisOn{
                self.BothBoxBtn.setImage(UIImage(named: "Checked Checkbox-26.png"), for: UIControlState.normal)
               //  self.unPlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
               // self.PlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            }
        }
    }

    var checkBox_unPlannedisOn:Bool = false {
        didSet{
            self.unPlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            if checkBox_unPlannedisOn{
                self.unPlannedBoxBtn.setImage(UIImage(named: "Checked Checkbox-26.png"), for: UIControlState.normal)
              //  self.PlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
              //   self.BothBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            }
        }
    }

    @IBAction func PlannedCheckBox(_ sender: UIButton) {

        if checkBox_PlannedisOn == false {
          //  self.PlannedBoxBtn.setImage(UIImage(named: "Checked Checkbox-26.png"), for: UIControlState.normal)
            checkBox_PlannedisOn = true
            print("i'm finally here proper click!",checkBox_PlannedisOn)
            self.callBackForReload!("Planned",true)


        }else {
          //  self.PlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            checkBox_PlannedisOn = false
            print("i'm finally heress proper click!",checkBox_PlannedisOn)
            self.callBackForReload!("Planned",false) 
        }  

          }

    @IBAction func BothCheckBox(_ sender: UIButton) {


          if checkBox_BothisOn == false {
          //  self.BothBoxBtn.setImage(UIImage(named: "Checked Checkbox-26.png"), for: UIControlState.normal)
            checkBox_BothisOn = true
            self.callBackForReload!("Both",true)


        }else {
            // self.BothBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
          //  self.BothBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            checkBox_BothisOn = false 
            self.callBackForReload!("Both",false)
        }

    }

    @IBAction func UnPlannedCheckBox(_ sender: Any) {


        if checkBox_unPlannedisOn == false {
           // self.unPlannedBoxBtn.setImage(UIImage(named: "Checked Checkbox-26.png"), for: UIControlState.normal)
            checkBox_unPlannedisOn = true
            self.callBackForReload!("UnPlanned",true)


        }else {
           // self.unPlannedBoxBtn.setImage(UIImage(named: "Unchecked Checkbox-26.png"), for: UIControlState.normal)
            checkBox_unPlannedisOn = false
            self.callBackForReload!("UnPlanned",false) 

        }
    }
}

最佳答案

声明一个变量以跟踪选中的复选框并根据该变量的状态更新其值。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 中修改代码如下

var selectedCheckBoxIndex:Int?



headerCell.checkBox_PlannedisOn = selectedCheckBoxIndex == 0 ? true : false
    headerCell.checkBox_unPlannedisOn = selectedCheckBoxIndex == 1 ? true : false
    headerCell.checkBox_BothisOn = selectedCheckBoxIndex == 2 ? true : false


if type == "Planned"{
            //Planned CallBack
            if isCalled == true {
                 print("Planned selected")
                self?.fetchPlannedData()
                self?.tableView.reloadData()
               selectedCheckBoxIndex = 0

            } else {

                self?.DeSelect()
                self?.tableView.reloadData()
                print("Planned Not selected")
            }
            self?.checkBox_PlannedisOn = isCalled
        }else if type == "UnPlanned"{
            //UnPlanned CallBack 
            if isCalled == true {
                print("UnPlanned Selected")
                self?.fetchUnPlannedData()
                self?.tableView.reloadData()
                selectedCheckBoxIndex = 1
            } else {
                self?.DeSelect()
                self?.tableView.reloadData()
                print("UnPlanned Not selected")
            }
            self?.checkBox_unPlannedisOn = isCalled
        }else{ 
            //Both CallBack 
            if isCalled == true { 
                print("Both Selected")
                self?.fetchDate()
                self?.tableView.reloadData()
                selectedCheckBoxIndex = 2
            } else {
                 self?.DeSelect()
                 self?.tableView.reloadData()
                print("both Not selected")
            }
             self?.checkBox_BothisOn = isCalled
        } 

    }

关于ios - 带有复选框的交互式 TableView 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45349078/

相关文章:

iOS:使用 Swift 创建对象类

c - 将 C 库与 Swift 结合使用(多指针及所有)

objective-c - UITableView 不要 float 部分标题

ios - 注册 UITableViewCell 以供重用时,该单元格上的哪个 init 方法被调用?

ios - Swift:有什么方法可以省略某些节标题单元格吗?

ios - 在用 Swift 编写的 iOS 应用程序中实现 Shopify

ios - iOS中如何实现 "clock wipe"/径向删除效果?

ios - 如何从我们的 iOS 应用程序中取消 BLE 设备的配对?

ios - 如何将 UIExtendedSRGBColorSpace 与我的颜色值匹配

swift - 调试 Realm ,调用堆栈没有任何应用程序代码