Отображение данных Firebase внутри PickerView - PullRequest
0 голосов
/ 07 марта 2020

КОД ОБНОВЛЕН И РАБОТАЕТ, КАК ОЖИДАЕТСЯ

У меня есть View Controller с текстовым полем и PickerView. Я хочу отобразить данные, которые я сохранил в Firebase внутри PickerView. Я могу получить и распечатать данные из 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"

Мне нужно только отображать itemName внутри PickerView, itemCode, который я собираюсь использовать чтобы выполнить запрос в зависимости от выбора в PickerView.

Любая помощь с этим очень приветствуется.

...