首页 > 解决方案 > 在 PickerView 中显示 Firebase 数据

问题描述

代码已更新并按预期工作

我有一个带有文本字段和 PickerView 的视图控制器。我想在 PickerView 中显示我存储在 Firebase 中的数据。我能够从 Firebase 检索和打印数据,但我找不到在 PickerView 中显示它的方法。这是我的代码:

  import UIKit
    import Firebase

class pickerVC: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {


    @IBOutlet weak var labelTxt: UITextField!
    @IBOutlet weak var infoPickerViewer: UIPickerView!

    var dbRef: CollectionReference!
    var pickerView: UIPickerView?
    var itemsClass = [ItemInfo]()

    override func viewDidLoad() {
        super.viewDidLoad()

        let pickerView = UIPickerView()
        infoPickerViewer.delegate = self
        infoPickerViewer.dataSource = self

        dbRef = Firestore.firestore().collection(ITEMS_REF)

        labelTxt.inputView = pickerView
        labelTxt.delegate = self

        self.infoPickerViewer = pickerView
        self.infoPickerViewer?.delegate = self
        self.infoPickerViewer?.dataSource = self

        self.infoPickerViewer.reloadAllComponents()
        getItems()

    }

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

      func textFieldDidBeginEditing(_ textField: UITextField) {
            labelTxt = textField
        }

        func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
                self.pickerView?.reloadAllComponents()
                return true
        }


    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if labelTxt.isFirstResponder {
            return self.itemsClass.count
        }
        return 0
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            if labelTxt.isFirstResponder {
                return itemsClass[row].itemName
            }
            return nil
        }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            if labelTxt.isFirstResponder {
                let item = itemsClass[row].itemName
                labelTxt.text = item
            }
        }


    func getItems() {
        dbRef.getDocuments { (snapshot, error) in
            if let err = error {
                debugPrint("error fetching docs: \(err)")
            } else {
                self.infoPickerViewer.reloadAllComponents()
                let snap = snapshot
                for document in snap!.documents {
                    let data = document.data()
                    let itemCode = data[ITEMS_CODE] as? String ?? ""
                    let itemName = data[ITEMS_NAME] as? String ?? ""

                    let t = ItemInfo(itemCode: itemCode, itemName: itemName)

                    self.itemsClass.append(t)

                    print("ITEMS_CODE", itemCode as Any)
                    print("ITEMS_NAME", itemName as Any)

                }
            }
        }
    }
}

Firebase 数据库的结构如下:

              collection/AutoID/itemCode: "item1"
                                itemName: "item2"

              collection/AutoID/itemCode: "item3"
                                itemName: "item4"

我只需要在 PickerView 中显示 itemName,itemCode 我将使用它来根据 PickerView 中的选择运行查询。

对此的任何帮助将不胜感激。

标签: swiftfirebaseuipickerview

解决方案


推荐阅读