提问者:小点点

如何从拾取器中读取和分配数据(从问题中尝试了几个答案,仍然没有解决)


所以我只想看看我选了哪个选项。 我读了一些问题和答案,但我不能使它工作。 我一定是做错了什么。 这就是我的代码:

import UIKit
import Firebase
import FirebaseFirestore

class AddItemViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutlet weak var itemNameField: UITextField!
    @IBOutlet weak var storeNameField: UITextField!
    @IBOutlet weak var dateOfPurchaseField: UIDatePicker!
    @IBOutlet weak var guaranteePeriodField: UIPickerView!
    let guaranteePeriodData = ["1 Year", "2 Years", "3 Years", "4 Years", "5 Years", "6 Years"]


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        guaranteePeriodField.delegate = self
        guaranteePeriodField.dataSource = self
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return guaranteePeriodData.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return guaranteePeriodData[row]
    }

    @IBAction func addItemButtonTouched(_ sender: Any) {
        let db = Firestore.firestore()

        guard let uid = Auth.auth().currentUser?.uid,
        let name = itemNameField.text else {
                return // return control to the caller or do something else to indicate access denied
        }
        let store = storeNameField.text
        let dateOfPurchase = dateOfPurchaseField.date
        let guaranteePeriod = guaranteePeriodData[guaranteePeriodField.selectedRow(inComponent: print(guaranteePeriod))]
        db.collection("recipes").addDocument(data: ["name": name, "uid": uid, "store": store, "dateOfPurchase": dateOfPurchase, "guaranteePeriod": guaranteePeriod])
        displayAlertMessage(alertTitle: "Success", alertMessage: "New item added successfully.", dismiss: true)
    }

我想让它尽可能简单,我只需要在将它保存到FireBase之前读取值。

I获取错误:

不支持的类型:UIPickerView(在“保证期”字段中找到)“

这就是我如何分配价值的方法:

let guaranteePeriod = guaranteePeriodField
        db.collection("recipes").addDocument(data: ["name": name, "uid": uid, "guaranteePeriod": guaranteePeriod])

共2个答案

匿名用户

您可以使用

var selectedItem = ""

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        selectedItem = guaranteePeriodData[row]
    }

根据您的更新更改如下:

let guaranteePeriod = selectedItem

匿名用户

您需要在ViewDidLoad中设置UIPickerView委托DataSource,如下所示:

guaranteePeriodField?.delegate = self
guaranteePeriodField?.dataSource = self

然后添加delegation方法DidSelectRow,如下所示:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    print(guaranteePeriodData[row])
}