Два UIPickerViews в одном ViewController - PullRequest
0 голосов
/ 07 января 2020

Два PickerViews selectTypeOfWorkChoices & selectLocationChoices отображаются некорректно.

Функция dismissPickerView () работает нормально. Однако другая функция " createPickerView ()" имеет некоторые проблемы. Хотя появляется UIpickerviews, я не вижу вариантов в UIPickerViews и не знаю почему.

Может кто-нибудь помочь мне выяснить, что не так с моим кодом, пожалуйста?

@IBOutlet weak var selectTypeOfWorkChoices: UIPickerView!

@IBOutlet weak var selectLocationChoices: UIPickerView!

override func viewDidLoad() {
    super.viewDidLoad()

    createPickerView()
    dismissPickerView()

    }

var typeOfWork = ["--", "a", "b", "c"]

var location = ["--", "A", "B", "C"]

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    var countrows : Int = typeOfWork.count
    if pickerView == selectLocationChoices {
        countrows = self.location.count
    }
    return countrows
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == selectTypeOfWorkChoices {
        let titleRow = typeOfWork[row]

        return titleRow
    }
    else if pickerView == selectLocationChoices {
        let titleRow = location[row]

        return titleRow
    }
    return ""
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == selectTypeOfWorkChoices {
        selectedPriority = typeOfWork[row]
        selectTypeOfWork.text = selectedPriority

        self.selectTypeOfWork.text = self.typeOfWork[row]

    }
    else if pickerView == selectLocationChoices {
        locationSelectedPriority = location[row]
        selectLocation.text = locationSelectedPriority

        self.selectLocation.text = self.location[row]

    }


}

var selectedPriority :  String?
var locationSelectedPriority :  String?


func createPickerView() {

    let pickerView = UIPickerView()
    pickerView.delegate = self

    self.selectTypeOfWorkChoices.delegate = self
    self.selectTypeOfWorkChoices.dataSource = self
    self.selectLocationChoices.delegate = self
    self.selectLocationChoices.dataSource = self


        selectTypeOfWork.inputView = selectTypeOfWorkChoices

        selectLocation.inputView = selectLocationChoices



}


@objc func dismissPickerView() {
    let toolBar = UIToolbar()
    toolBar.sizeToFit()

    let doneButton = UIBarButtonItem(title:"Done", style: .plain, target: self, action: #selector(self.dismissKeyboard))
    toolBar.setItems([doneButton], animated: false)
    toolBar.isUserInteractionEnabled = true

    selectTypeOfWork.inputAccessoryView = toolBar
    selectLocation.inputAccessoryView = toolBar
}

@objc func dismissKeyboard () {
    view.endEditing(true)
}

1 Ответ

0 голосов
/ 07 января 2020

Перезагрузите представление выбора после назначения представления ввода для вашего текстового поля.

func createPickerView() {

    let pickerView = UIPickerView()
    pickerView.delegate = self

    self.selectTypeOfWorkChoices.delegate = self
    self.selectTypeOfWorkChoices.dataSource = self
    self.selectLocationChoices.delegate = self
    self.selectLocationChoices.dataSource = self

    selectTypeOfWork.inputView = selectTypeOfWorkChoices
    selectLocation.inputView = selectLocationChoices

    //Reload Pickerview
    self.selectTypeOfWorkChoices.reloadAllComponents()
    self.selectLocationChoices.reloadAllComponents()
}
...