Несколько полей ввода, используя один и тот же UIpickerview

Я использую одно и то же окно выбора в двух текстовых полях ввода. Тем не менее, приложение продолжает падать, когда я использую окно выбора для второго ввода, поскольку появляется ошибка, что индекс находится вне диапазона. Я использую "перезагрузить компоненты" для моего выбора, так что не знаю, почему он все еще дает такую ​​ошибку. Весь день пытался понять это, поэтому любая помощь будет по достоинству оценена!

Класс MainVC: UIViewController, UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource {

@IBOutlet weak var fromTextField: UITextField!
@IBOutlet weak var toTextField: UITextField!

var countries = [Country]()

override func viewDidLoad() {
    super.viewDidLoad()

    //initialise data
    appendCountries()

    //set-up picker view
    let pickerView = UIPickerView()
    pickerView.delegate = self
    pickerView.dataSource = self
    fromTextField.inputView = pickerView
    toTextField.inputView = pickerView

}

//pickerview set-up
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 2
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if component == 0 {
        return countries.count
    }
    else {
        let selectedCountry = pickerView.selectedRow(inComponent: 0)
        return countries[selectedCountry].cities.count
    }

}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if component == 0 {
        return countries[row].country
    }
    else {
        let selectedCountry = pickerView.selectedRow(inComponent: 0)
        return countries[selectedCountry].cities[row]   //error here... Thread 1: Fatal error: Index out of range
    }
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    pickerView.reloadAllComponents()

    let selectedCountry = pickerView.selectedRow(inComponent: 0)
    let selectedCity = pickerView.selectedRow(inComponent: 1)
    let country = countries[selectedCountry].country
    let city = countries[selectedCountry].cities[selectedCity]

    if fromTextField.isEditing == true {
        fromTextField.text = city
    } else {
        toTextField.text = city
    }
}

0 ответов

Другие вопросы по тегам