Matrix Survey in Tableview cell on Swift

359 views Asked by At

i use DLRadioButton in tableview cells. I have 30 cell in table and 4 DLRadioButton each cell. Example if i selected first radio button in first cell, 5., 9., 13., 17., 21., 25. and 29. cell's first radio button automatically selected. How i fix this?

DLRadioButton : https://github.com/DavydLiu/DLRadioButton

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ac",for:indexPath) as! AnswerChoicesTableCell

    cell.tag = data[indexPath.row]["ac_id"].intValue;
    let acID:Int = data[indexPath.row]["ac_id"].intValue;
    cell.ACTitle.text = data[indexPath.row]["ac_question"].stringValue

    cell.ACButton1.setTitle(data[indexPath.row]["ac_choice_1"].stringValue, for: .normal)
    cell.ACButton1.titleLabel?.numberOfLines = 0
    cell.ACButton1.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton1.acID = acID
    if(data[indexPath.row]["ac_choice_1"].stringValue == "-"){
        cell.ACButton1.isHidden = true
        for constraint in  cell.ACButton1.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton1.layoutIfNeeded()
    }


    cell.ACButton2.setTitle(data[indexPath.row]["ac_choice_2"].stringValue, for: .normal)
    cell.ACButton2.titleLabel?.numberOfLines = 0
    cell.ACButton2.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton2.acID = acID
    if(data[indexPath.row]["ac_choice_2"].stringValue == "-"){
        cell.ACButton2.isHidden = true
        for constraint in  cell.ACButton2.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton2.layoutIfNeeded()

    }


    cell.ACButton3.setTitle(data[indexPath.row]["ac_choice_3"].stringValue, for: .normal)
    cell.ACButton3.titleLabel?.numberOfLines = 0
    cell.ACButton3.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton3.acID = acID
    if(data[indexPath.row]["ac_choice_3"].stringValue == "-"){
        cell.ACButton3.isHidden = true
        for constraint in  cell.ACButton3.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton3.layoutIfNeeded()
    }

    cell.ACButton4.setTitle(data[indexPath.row]["ac_choice_4"].stringValue, for: .normal)
    cell.ACButton4.titleLabel?.numberOfLines = 0
    cell.ACButton4.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton4.acID = acID

    if(data[indexPath.row]["ac_choice_4"].stringValue == "-"){
        cell.ACButton4.isHidden = true
        for constraint in  cell.ACButton4.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton4.layoutIfNeeded()


    }


 cell.ACButton4.otherButtons = [cell.ACButton1,cell.ACButton3,cell.ACButton2]

    return cell
}

tableview screenshot

1

There are 1 answers

0
Eren Özkul On BEST ANSWER

I solved this problem. I had to add "indexPath" properties of DLRadiobutton.

add DLRadioButton.m file on Pods folder ;

@property (nonatomic) IBInspectable NSInteger indexPath;

tableviewController;

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ac",for:indexPath) as! AnswerChoicesTableCell




    cell.tag = data[indexPath.row]["ac_id"].intValue;
    let acID:Int = data[indexPath.row]["ac_id"].intValue;
    cell.ACTitle.text = data[indexPath.row]["ac_question"].stringValue


    cell.ACButton1.setTitle(data[indexPath.row]["ac_choice_1"].stringValue, for: .normal)
    cell.ACButton1.titleLabel?.numberOfLines = 0
    cell.ACButton1.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton1.acID = acID
    cell.ACButton1.indexPath = indexPath.row;
    if(data[indexPath.row]["ac_choice_1"].stringValue == "-"){
        cell.ACButton1.isHidden = true
        for constraint in  cell.ACButton1.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton1.layoutIfNeeded()
    }


    cell.ACButton2.setTitle(data[indexPath.row]["ac_choice_2"].stringValue, for: .normal)
    cell.ACButton2.titleLabel?.numberOfLines = 0
    cell.ACButton2.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton2.acID = acID
    cell.ACButton2.indexPath = indexPath.row
    if(data[indexPath.row]["ac_choice_2"].stringValue == "-"){
        cell.ACButton2.isHidden = true
        for constraint in  cell.ACButton2.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton2.layoutIfNeeded()

    }


    cell.ACButton3.setTitle(data[indexPath.row]["ac_choice_3"].stringValue, for: .normal)
    cell.ACButton3.titleLabel?.numberOfLines = 0
    cell.ACButton3.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton3.acID = acID
    cell.ACButton3.indexPath = indexPath.row
    if(data[indexPath.row]["ac_choice_3"].stringValue == "-"){
        cell.ACButton3.isHidden = true
        for constraint in  cell.ACButton3.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton3.layoutIfNeeded()
    }

    cell.ACButton4.setTitle(data[indexPath.row]["ac_choice_4"].stringValue, for: .normal)
    cell.ACButton4.titleLabel?.numberOfLines = 0
    cell.ACButton4.titleLabel?.lineBreakMode = .byWordWrapping
    cell.ACButton4.acID = acID
    cell.ACButton4.indexPath = indexPath.row;
    if(data[indexPath.row]["ac_choice_4"].stringValue == "-"){
        cell.ACButton4.isHidden = true
        for constraint in  cell.ACButton4.constraints {
            if constraint.identifier == "h" {
                constraint.constant = 0
            }
        }
        cell.ACButton4.layoutIfNeeded()


    }
    cell.ACButton1.addTarget(self, action:#selector(AnswerChoiesViewController.ACButtonClick(_:)),for: .touchUpInside)

    cell.ACButton2.addTarget(self, action:#selector(AnswerChoiesViewController.ACButtonClick(_:)),for: .touchUpInside)

    cell.ACButton3.addTarget(self, action:#selector(AnswerChoiesViewController.ACButtonClick(_:)),for: .touchUpInside)

    cell.ACButton4.addTarget(self, action:#selector(AnswerChoiesViewController.ACButtonClick(_:)),for: .touchUpInside)

    cell.ACButton1.otherButtons = [cell.ACButton4,cell.ACButton3,cell.ACButton2]
   let acString = data[indexPath.row]["ac_id"].stringValue;
    print(selectedIndex)
    if(selectedIndex.contains((indexPath.row))){

        //print(indexPath.row)
        if(selectedChoices[acString] == 1){

            cell.ACButton1.isSelected = true;

        }
        else if(selectedChoices[acString] == 2){
             cell.ACButton2.isSelected = true;
        }
        else if(selectedChoices[acString] == 3){
             cell.ACButton3.isSelected = true;
        }
        else if(selectedChoices[acString] == 4){
           cell.ACButton4.isSelected = true;

        }

    }else{
        cell.ACButton1.isSelected = false;
        cell.ACButton2.isSelected = false;
        cell.ACButton3.isSelected = false;
        cell.ACButton4.isSelected = false;
    }


    return cell
}







@IBAction func ACButtonClick(_ sender:DLRadioButton) {
    let acID = sender.acID as NSNumber
    self.selectedChoices[acID.stringValue] = sender.tag
    if(!self.selectedIndex.contains((sender.indexPath))){
        self.selectedIndex.append(sender.indexPath)
    }

}