我在表视图单元格中使用DLRadioButton。我在表中有30个单元格,每个单元格有4个DLRadioButton。例如,如果我在第一个单元格中选择了第一个单选按钮,则自动选择5.,9.,13.,17.,21.,25。和29.单元格的第一个单选按钮。我该如何解决?
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
}
最佳答案
我解决了这个问题。我必须添加DLRadiobutton的“ indexPath”属性。
在Pods文件夹上添加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)
}
}