【问题标题】:I need to populate a picker我需要填充一个选择器
【发布时间】:2020-08-08 08:32:36
【问题描述】:

我是 Swift 编程新手,我需要的是一个填充有 Json 数据的 pickerView(以编程方式完成)。我成功地用对象的名称填充了选择器,但我需要选择名称并捕获 Json 数据中出现的对象的 id。

我非常感谢您提供代码行的答案。

【问题讨论】:

    标签: ios picker pickerview


    【解决方案1】:

    • 首先创建一个数组来存储获取的'id'。像在 dataZoneName 中一样保存 id。

    • 然后在选择器 didSelectRow 委托上使用行索引选择与所选字符串对应的 id

    • 现在 idToken 在选择器中具有所选名称的 id。

    • 还将 alamofire 数据获取代码从 viewdidLoad 移至单独的函数。还要为字符串类型的 id 声明一个参数。

    【讨论】:

      【解决方案2】:

      假设您正在使用来自 json 解析的 SwiftyJson 和 Alamofire 来命中 API。

      当您点击 API 时,您可以使用 swiftyjson 制作模型,例如

      import Foundation
      import SwiftyJSON
      struct UnitsModel {
      
      var id: Int = 0
      var name: String = ""
      
      init(fromJson Json: JSON!) {
          
          if Json.isEmpty {
              return
          }
          
          id = Json["id"].intValue
          name = Json["name"].stringValue
      }}
      

      现在您需要将 json 响应映射到您的数组,然后您可以使用

      fileprivate func APIRequestGetUnitsCompleted(response: Any?, error: Error?) {
          if let response = response{
              let json = JSON(response)
              
              let units = json["units"].arrayValue
              
              for index in 0..<units.count{
                  let model = UnitsModel(fromJson: units[index])
                  unitsArray.append(model)
              }
              
          }else{
              //print("Error")
          }
      }
      

      在您的视图控制器中创建一个您刚刚创建的模型类型数组,并创建一个变量来存储 ID

      var unitsArray = [UnitsModel]()
      var selectedUnitId = 0
      

      现在您可以使用以下代码:

      ViewController: UIPickerViewDelegate, UIPickerViewDataSource{
      
      
      func createPickerView() {
          
          pickerView.delegate = self
          unitTextField.inputView = pickerView
          
      }
      
      func dismissPickerView() {
          let toolBar = UIToolbar()
          toolBar.sizeToFit()
          let button = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.action))
          toolBar.setItems([button], animated: true)
          toolBar.isUserInteractionEnabled = true
          unitTextField.inputAccessoryView = toolBar
      }
      
      @objc func action() {
          view.endEditing(true)
      }
      
      func numberOfComponents(in pickerView: UIPickerView) -> Int {
          return 1
      }
      
      func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
          
          return unitsArray.count
      }
      
      func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
          
          return unitsArray[row].name
      }
      
      func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
          unitTextField.text = unitsArray[row].name
          selectedUnitId = unitsArray[row].id
          // selectedUnitId is variable in which id of selected option from picker view will be saved.
      
      }}
      

      【讨论】:

        猜你喜欢
        • 2017-04-15
        • 1970-01-01
        • 2013-01-08
        • 2020-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多