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]
}
}
答案 0 :(得分:0)
如果您确实从URL获取了数据(我没有验证这一点,并且我认为您确实看到了print
语句中的数据),则需要在您的选择器视图中调用reloadAllComponents
在获取数据后重新加载数据。
答案 1 :(得分:0)
将您的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")
}