2017-07-27 62 views
-1

我设计了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) 

     } 
    } 
} 
+0

可以为每个按键设置标签,当你点击某个按钮,然后取消选择基于标签的其他按钮。 –

+0

请阅读[在什么情况下,我可以添加“紧急”或其他类似的短语到我的问题,以获得更快的答案?](/ meta.stackoverflow.com/q/326569) - 总结是,这不是这是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将这添加到您的问题。 – halfer

回答

2

声明一个变量来跟踪选定的复选框,并更新取决于变量的状态它的价值。

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 
     } 

    } 
+0

工作!谢谢Alotttt! –

+0

@shahtajkhalid你不客气 –