【问题标题】:pickerview does not display data from an Arraypickerview 不显示数组中的数据
【发布时间】:2017-08-10 10:18:53
【问题描述】:

我的视图控制器中的PikerView 不显示数据。

当我使用一些 Array 文字值对其进行测试时,它工作正常。

我应该在某处重新加载数据吗?

class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
{
    @IBOutlet var baseCurrency: UITextField!
    @IBOutlet var excahngeCurrency: UITextField!
    @IBOutlet var dropDown: UIPickerView!

    var list: [String: AnyObject] = [String: AnyObject]()
    var titles: [String] = []
    override func viewDidLoad()
    {
        super.viewDidLoad()

        let url:URL = URL(string: "https://openexchangerates.org/api/currencies.json?app_id=7486951aeb994599a08cd7979bef3c03")!
    Alamofire.request(url).responseJSON(completionHandler:
        {
            response in
            switch response.result
            {
            case.success:
                self.list = response.result.value as! [String: AnyObject]
                for (key, _) in self.list
                {
                    self.titles += [key]
                }

                print(self.titles)
            case.failure:
                print("error")
            }
        })
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int
    {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {
        return self.titles[row]
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    {
        return self.titles.count
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        exchangeCurrency.text = self.titles[row]
    }
}

【问题讨论】:

    标签: ios arrays swift xcode uipickerview


    【解决方案1】:

    如果您确实从 URL 中获取了数据(我没有验证这一点,并且我假设您确实在您拥有的 print 语句中看到了数据),您需要在您的 pickerview 上调用 reloadAllComponents 以便它重新加载获取数据后的数据。

    【讨论】:

      【解决方案2】:

      将您的 success 块更新为:

      case success:
      
          self.list = reponse.result.value as! [String: AnyObject]
      
          for (key, _) in self.list {
              self.titles += [key]
          }
      
          print(self.titles)
      
          if (self.titles.count > 0) {
              // reload your picker view
              self.dropDown.reloadAllComponents()
          } else {
              print("there is no data for your picker view")
          }
      

      【讨论】:

      • 感谢克鲁纳尔。当我添加它时,我收到以下错误:对成员'pickerView(_:titleForRow:forComponent:)'的模糊引用
      • 你能分享一下确切的错误行吗...您是否在这里使用了自己的选择器视图实例... dropDown。我认为您只是复制了我的代码并将其替换为您自己的代码。您可能没有更新选择器实例。我已经更新了我的答案。如果您尚未更新选择器实例,请重试。
      • @Phani.m - 如果它解决了您的问题,您可以接受并投票赞成这个答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多