我需要填充一个选择器
Posted
技术标签:
【中文标题】我需要填充一个选择器【英文标题】:I need to populate a picker 【发布时间】:2020-08-08 08:32:36 【问题描述】:我是 Swift 编程新手,我需要的是一个填充有 Json 数据的 pickerView(以编程方式完成)。我成功地用对象的名称填充了选择器,但我需要选择名称并捕获 Json 数据中出现的对象的 id。
我非常感谢您提供代码行的答案。
【问题讨论】:
【参考方案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.
【讨论】:
以上是关于我需要填充一个选择器的主要内容,如果未能解决你的问题,请参考以下文章