0

我是 Swift 的新手,我需要的是一个填充有 Json 数据的pickerView(以编程方式完成)。我成功地用对象的名称填充了选择器,但我需要选择名称并捕获 Json 数据中出现的对象的 id。

我真的很感谢代码行的答案。

4

2 回答 2

0

• 首先创建一个数组来存储获取的'id'。像在 dataZoneName 中一样保存 id。

• 然后在选择器 didSelectRow 委托上使用行索引选择与所选字符串对应的 id

• 现在idToken 在选择器中具有选定名称的ID。

• 还将alamofire 数据获取代码从viewdidLoad 移至单独的函数。还要为字符串类型的 id 声明一个参数。

于 2020-08-08T11:42:15.850 回答
0

假设您正在使用来自 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.

}}
于 2020-08-10T08:44:54.427 回答