Я не знаю, что я сделал, чтобы разозлить богов, но мой UIPickerView работает ненормально.Он имеет 2 компонента для значений месяца и года, и выбор значения в правом компоненте (year) также приводит к изменению значения в левом компоненте (month).
Сначала я создаю UIPickerView, используя следующий код:
pickerView = UIPickerView(frame: ...)
pickerView.delegate = self
pickerView.dataSource = self
Затем я реализую несколько простых методов делегирования / источника данных для обработки представления выбора, как показано ниже:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
expirationMonth = months[row]
} else {
expirationYear = years[row]
}
expirationTextField?.text = "\(expirationMonth ?? "")/\(expirationYear?.substring(from: 2) ?? "")"
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return months[row]
} else {
return years[row]
}
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return months.count
} else {
return years.count
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
Кроме того, метод источника данных UIPickerView numberOfComponents
вызывается, даже если я не установил источник данных представления средства выбора.
Понятия не имею, что вызывает такое поведение.Я попробовал почти все, и ничто не мешает изменить значения обоих столбцов.У кого-нибудь есть идеи, чтобы это исправить?