Несколько полей ввода, используя один и тот же 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
}
}