UIButton状态在用多个部分滚动tableview时改变 - Swift

问题描述 投票:0回答:1

我的tableview中有多个部分,包含多个自定义单元格(带单选按钮的单元格,带复选框的单元格和带文本字段的单元格)。问题在带有单选按钮的部分下,在单选按钮部分下只能选择一个单选按钮。选择后,我尝试滚动,选择了多个单选按钮。非常感谢。

class RedioButtonCell: UITableViewCell {

var radioButtonDelegate: RedioCellDelegate?
  var cellindexPath : IndexPath?
@IBOutlet weak var btnRediouttion: UIButton?
@IBOutlet weak var lblTitle: UILabel?


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}
}

行方法:

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
 if ((qaArray[indexPath.section]["Que"] as! [String:String])["type"]!) == CONTROL
    {
        let  cell = tableView.dequeueReusableCell(withIdentifier: "RedioButtonCell", for: indexPath) as! RedioButtonCell

     cell.btnRediouttion?.tag = Int("\(indexPath.section)" +  "\(indexPath.row)")!

        cell.lblTitle!.text = String(describing: ansDetailArray[indexPath.row]["survey_answer"]!)


let deselectedImage = UIImage(named:         "Radio_Unselected")?.withRenderingMode(.alwaysTemplate)
    let selectedImage = UIImage(named: "radio_Selected")?.withRenderingMode(.alwaysTemplate)
    btnRediouttion?.setImage(deselectedImage, for: .normal)
    btnRediouttion?.setImage(selectedImage, for: .selected)
    btnRediouttion?.addTarget(self, action:    #selector(self.radioButtonTapped), for: .touchUpInside)

         cell.cellindexPath = indexPath;
        return cell
    }
}
func radioButtonTapped(_ radioButton: UIButton) {
    print("radio button tapped")
    let isSelected = !(radioButton?.isSelected)!
    radioButton?.isSelected = isSelected
    if isSelected {


    }

}
swift uitableview uibutton
1个回答
1
投票

tableView单元格被重用(在滚动时发生),因此您需要通过保存它的IndexPath来跟踪所选的单元格并将其分配到cellForRowAt

//

在VC中声明这一点

 var currentIndex:IndexPath?

//

class RadioButton:UIButton {

  var indexPath:IndexPath
}

//

func radioButtonTapped(_ radioButton: RadioButton) {

    self.currentIndex = radioButton.indexPath
}

//

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

      if indexPath == currentIndex {
         // this should be selected
      }
      else {
         // Deselect this 
      }

      cell.radioButton.indexPath = indexPath 
}
© www.soinside.com 2019 - 2024. All rights reserved.