【发布时间】:2017-03-22 01:40:28
【问题描述】:
我有这些使用 PHP 的 JSON 输出。
[
{"number":"001","name":"MIKE"},
{"number":"002","name":"JOSH"}
]
在 Swift 中,我设法选择了 "name" 值并将其显示到 UIPickerView 中,如下所示。
DropdownJSON.swift
import UIKit
class DropdownJSON: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
@IBOutlet var dropdownTxt: UITextField!
@IBOutlet var dropdownPV: UIPickerView!
@IBOutlet var numberLbl: UILabel!
@IBOutlet var nameLbl: UILabel!
var persons = [Person]()
struct Person {
var number:String
var name: String
init?(dict: [String:Any]) {
guard let number = dict["number"] as? String, let name = dict["name"] as? String else {
return nil
}
self.number = number
self.name = name
}
}
override func viewDidLoad() {
super.viewDidLoad()
getDropdownJSON()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return self.persons.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return persons[row].name
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.numberLbl.text = self.persons[row].number
self.nameLbl.text = self.persons[row].name
self.dropdownPV.isHidden = true
self.dropdownTxt.resignFirstResponder()
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == self.dropdownTxt{
self.dropdownPV.isHidden = false
}
}
func getDropdownJSON() {
let url = URL(string: "http://localhost/DropdownJSON.json")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
guard let data = data, error != nil else {
print(error?.localizedDescription)
return
}
if let array = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [[String:Any]] {
self.persons = array.flatMap(Person.init)
DispatchQueue.main.async {
self.dropdownPV.reloadAllComponents()
}
}
}
task.resume()
}
}
但我的目标是在 function pickerView (didSelectRow) 中显示 JSON 输出 "number" 到 numberLbl 和 "name" 到 nameLbl。
原因是我想稍后再发布 numberLbl。 nameLbl 只是显示在屏幕页面上。
有可能吗?感谢有人可以在这件事上提供帮助。
更新
谢谢。
【问题讨论】:
标签: json swift3 uipickerview