2017-11-17 20 views
0

私はtableviewセルでDLRadioButtonを使用します。テーブルに30セル、各セルに4つのDLRadioButtonがあります。例:最初のセルの最初のラジオボタンを選択した場合、5.,9,13,17,21,25および29.セルの最初のラジオボタンが自動的に選択されます。どのように私はこれを修正?SwiftのTableviewセルのマトリックス調査

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

+0

4つの選択肢を持つオブジェクトを作成するだけですか? – Tj3n

答えて

0

私はこの問題を解決しました。 DLRadiobuttonの "indexPath"プロパティを追加する必要がありました。

ポッドフォルダにDLRadioButton.mファイルを追加します。

@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) 
    } 

} 
関連する問題