如何根据来自 Web 服务的数据启用单选按钮?

Posted

技术标签:

【中文标题】如何根据来自 Web 服务的数据启用单选按钮?【英文标题】:how to enable the radio button depending on the data coming from web services? 【发布时间】:2017-06-21 14:00:24 【问题描述】:

在这里我实现了一个自定义设计,如图像shown here 我需要根据我的 Web 服务数据激活单选按钮。在 Web 服务中,我只收到 0 和 1 的一个键值对,如果它是 1,那么我需要激活单选按钮来帮助如何实现?

这是我的单选按钮的代码

        @IBAction func selectRadioButton(_ sender: KGRadioButton) 
            let chekIndex = self.checkIsRadioselect.index(of: sender.tag)
            let checkIndex = self.checkIsButtonEnable.index(of: sender.tag)
            if sender.isSelected 

             else
                if(chekIndex == nil)
                    self.checkIsRadioSelect.removeAll(keepingCapacity: false)
                    self.checkIsRadioSelect.append(sender.tag)
                    self.checkIsButtonEnable.removeAll(keepingCapacity: false)
                    self.checkIsButtonEnable.append(sender.tag)
                    self.tableDetails.reloadData()
                
            
        

这是表格视图的代码

       let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! addressTableViewCell
                tableDetails.isHidden = false
                myActivityIndicator.stopAnimating()
                let arr = detailsArray[indexPath.row]
                cell.nameLabel.text = arr["name"]as? String
                cell.addressLabel.text = arr["address"]as? String
                let mobilenumber : Int =  arr["number"] as! Int
                cell.mobileNumberLabel.text = String(describing: mobilenumber)
                let defaultaddress : Int = arr["default"] as! Int
                cell.radioButton.tag = indexPath.row
                cell.editButton.tag = indexPath.row
                cell.deleteButton.tag = indexPath.row
                cell.editButton.isHidden = true
                cell.deleteButton.isHidden = true
                let checkIndex = self.checkIsRadioSelect.index(of: indexPath.row)
                if(checkIndex != nil)
                    cell.radioButton.isSelected = true
                    cell.editButton.isHidden = false
                    cell.deleteButton.isHidden = false
                else
                    cell.radioButton.isSelected = false
                    cell.editButton.isHidden = true
                    cell.deleteButton.isHidden = true
                
                return cell

【问题讨论】:

我没有告诉你是否需要使用 API 数据显示单选按钮的状态。或者您想在单击时更新单选按钮状态? 我需要两者都有,但对于第一次加载应用程序,它应该从 api 获取并根据我的数据激活单选按钮,稍后我需要手动更改它 手动我已经设置,我还需要设置 api 数据@DSDharma 检查我的答案.. 【参考方案1】:

在您的cellForRowAtIndexPath 方法更新代码中,如下所示

我的建议是不要在重用 tableView 单元格时将 indexPath.row 设置为标签,它不会给你更好的结果。将一些唯一的 id 作为标签。或者做一些数学计算,加/乘数字。

 let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! addressTableViewCell
 tableDetails.isHidden = false
 myActivityIndicator.stopAnimating()
 let arr = detailsArray[indexPath.row]
 cell.nameLabel.text = arr["name"]as? String
 cell.addressLabel.text = arr["address"]as? String
 let mobilenumber : Int =  arr["number"] as! Int
 cell.mobileNumberLabel.text = String(describing: mobilenumber)
 cell.radioButton.tag = indexPath.row
 cell.editButton.tag = indexPath.row
 cell.deleteButton.tag = indexPath.row
 cell.editButton.isHidden = true
 cell.deleteButton.isHidden = true
 cell.radioButton.isSelected = false

 if let isDefault = arr["default"] as? Bool  // i think it won't be Integer it will be Bool,please debug & check it
          cell.radioButton.isSelected = isDefault 
          cell.editButton.isHidden = false
          cell.deleteButton.isHidden = false
 
 let checkIndex = self.checkIsRadioSelect.index(of: indexPath.row)
     if(checkIndex != nil)
     cell.radioButton.isSelected = true
     cell.editButton.isHidden = false
     cell.deleteButton.isHidden = false
  

【讨论】:

我需要在那个方法中替换或添加它 用它替换单选按钮的旧代码。确保检查默认值为 Bool 或 Int 这意味着我需要在单选按钮操作方法或单元格中将其替换为 indexpth 处的行 是的,我不知道 self.checkIsRadioSelect 的用途请更新它 如果我更改了,我将无法手动更新激活的单选按钮【参考方案2】:

更改下面的代码行。

let checkIndex = self.checkIsRadioSelect.index(of: indexPath.row) //delete this line

let checkIndex = arr["default"] as! Int //use radio button key.

@IBAction func selectRadioButton(_ sender: KGRadioButton) 

        let arr = detailsArray[sender.tag]
        if sender.isSelected 
            arr["default"] = @"0"

         else
            arr["default"] = @"1"
        
        self.tableDetails.reloadData()

    

【讨论】:

我没有将单选按钮键作为键值对,那么它是如何工作的 我将默认设置为键值对,因为我需要设置为单选按钮 let checkIndex = self.checkIsRadioSelect.index(of: indexPath.row) 我正在使用它手动将单选按钮键更改为活动 关键是什么?你能分享网络服务响应吗? 默认是我的键值

以上是关于如何根据来自 Web 服务的数据启用单选按钮?的主要内容,如果未能解决你的问题,请参考以下文章

当数据来自数据库时,如何一次只选择一个单选按钮并在javascript中取消选择其他单选按钮?

如何根据垫单选按钮的值禁用垫输入字段?

如何使用 jquery 启用或禁用基于其他 2 个单选按钮的单选?

改进单选按钮的使用以启用/禁用表单字段

使用来自数据库 Laravel Blade 的数据填充单选按钮

根据之前的单选选项禁用单选按钮