Проблема здесь:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
birthDateTextField.text = "\(pickerMonth[row])/\(pickerDay[row])/\(pickYears[row])"
}
Это слишком просто. Думаю об этом. Пользователь раскручивает только один компонент за раз, и ваш метод вызывается. Допустим, это годовой компонент, который крутил пользователь. У вас есть 300 из них. Так что row
может быть 300 (скажем). Но у pickerMonth
нет 300 месяцев! Таким образом, вы говорите sh, когда вы наивно говорите pickerMonth[row]
.
Что вы хотите сделать, это спросить сборщик, чтобы просмотреть, какая строка выбрана во всех трех компонентах, и использовать эту строку для этого компонент.
birthDateTextField.text =
pickerMonth[pickerView.selectedRow(inComponent:0)]
+ "/" +
pickerDay[pickerView.selectedRow(inComponent:1)]
+ "/" +
pickYears[pickerView.selectedRow(inComponent:2)]