我需要填充一个选择器

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.


【讨论】:

以上是关于我需要填充一个选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何从 NSStrings 数组中填充选择器视图?然后我将如何访问所选择项目的价值?

选择器视图选项填充标签

使用json填充选择器不能按预期工作

从 json 填充选择器,SwiftUI

使用日期选择器填充日期下拉列表

如何从 ViewModel 对象填充选择器,设置为第一个元素的初始状态并处理选择选择器项的操作