所以我只想看看我选了哪个选项。 我读了一些问题和答案,但我不能使它工作。 我一定是做错了什么。 这就是我的代码:
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])
您可以使用
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])
}