无法获得单选复选框

时间:2019-03-14 10:48:37

标签: ios swift uitableview uibutton

我制作了一个tableviewcell,并且其中有一个按钮。我在tableviewcell.swift类中连接了按钮的IBAction。然后,我创建了一个委托,并像这样访问viewcontroller类中的按钮触摸动作。

func optionTap(cell: SlideUpTableViewCell) {
    if let indexPath = tableview?.indexPath(for: cell) {
     }
}

但是我想要实现的是,我希望一次只选择一个复选框按钮。我有3行,现在我可以同时点击3个按钮中的每一个,而我一次只想点击1个按钮。也就是说,如果我点击第一个单元格上的按钮,然后点击第二个单元格中的按钮,则应该自动取消选择第一个单元格按钮。简而言之,正常的单选工作原理...

我已经尝试过了...但是它不起作用...

   func optionTap(cell: SlideUpTableViewCell) {
if let indexPath = tableview?.indexPath(for: cell) {

  if selectedArrayIndex.contains(indexPath.row) {

    selectedArrayIndex.remove(at: selectedArrayIndex.index(of: indexPath.row)!)
    cell.checkBobButton.tintColor = ThemeManager.current().inactiveGrayColor
    cell.checkBobButton.setImage(UIImage(named: "circle_stroke"), for: .normal)

  } else {
    selectedArrayIndex.append(indexPath.row)
    cell.checkBobButton.tintColor = ThemeManager.current().secondaryColor
    cell.checkBobButton.setImage(UIImage(named: "circle_tick"), for: .normal)

  }

 }
}

编辑1:。这是cellForRow。.

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: SlideUpTableViewCell = tableView.dequeueReusableCell(withIdentifier: cellID) as! SlideUpTableViewCell
    cell.delegate = self
    cell.selectionStyle = .none
    cell.headingLabel.text = self.arrData[indexPath.row].heading
    cell.subHeadingLabel.text = self.arrData[indexPath.row].subHeading

    return cell
  }

编辑2 :这是用户界面的外观。

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,您不需要按钮操作。请按照以下步骤进行简单而完美的编码:

  1. 在控制器中var selectedIndex = -1 //如果未选择任何索引,则采用-1,如果要默认选择任何选项,则进行相应的更改。

  2. 使用tableView委托方法didSelectRowAt indexPath

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    
        selectedIndex = indexPath.row
        myTblView.reloadData()
    
    }
    
  3. 现在要切换btn只需在cellForRow中进行。

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! Mycell
    
        :            
        cell.myBtn.isSelected = indexPath.row == selectedIndex
        :
    
        return cell
    }
    
  4. 现在在情节提要中,为所选状态和默认状态分配按钮图像。

enter image description here

enter image description here

答案 1 :(得分:0)

 // if you want to use didselect or diddeselect than :

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          if let cell = tableView.cellForRow(at: indexPath)as? tableViewCell{
          cell.mRadioimage.image = UIImage(named: "radioCheckedImage")

            }
           }
   func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
          if let cell = tableView.cellForRow(at: indexPath)as? tableViewCell{
          cell.mRadioimage.image = UIImage(named: "radioUnCheckedImage")
              }       
          }

        // don't forget to choose singleSelection
        // hope its work for you