UIDatePicker не работает в macCatalyst (Xcode 11 Beta 5)
Мы конвертируем наше приложение для iOS в MacCatalyst, используя катализатор Swift в Xcode 11 beta 5.
У нас есть проблема, связанная с тем, что DatePicker по умолчанию не отображается в окне.
Я пробую это решение для Mac, и оно добавит в поле выбора даты, но я хочу другое правильное решение. Любое другое предложение?
func datepickerWillLoad() {
self.datePicker.datePickerMode = .date
self.datePicker.maximumDate = Date()
self.datePicker.backgroundColor = UIColor.Theme.lightBackground
self.datePicker.setValue(UIColor.Theme.whiteColor, forKeyPath: "textColor")
self.datePicker.addTarget(self, action: #selector(didChangedDatePickerValue), for: .valueChanged)
//if user open picker and without change click on done
self.dateOfBirthTextField.addTarget(self, action: #selector(didChangedDatePickerValue), for: .editingDidEnd)
#if targetEnvironment(macCatalyst)
datePicker.frame = CGRect(x: 0, y: self.view.frame.height - 200 , width: self.view.frame.width, height: 200)
self.view.addSubview(datePicker)
#else
self.dateOfBirthTextField.inputView = datePicker
#endif
}
0 ответов
На мой взгляд, причина проблемы в том, что UIDatePicker был переработан в компактный контроллер вместо обычного колеса iOS (вероятно, начиная с Mac Catalyst 13.4+). Таким образом, цветовую схему нельзя применить к несуществующему колесу с помощью функции setValue, и это вызывает ошибку.
Поэтому я попытался вернуть режим колеса в свой UIDatePicker. Поэтому я добавил в свой UIDatePicker следующую строку, которая решила проблему для меня:
if #available(macCatalyst 13.4, *) {
myDatePicker.preferredDatePickerStyle = .wheels
myDatePicker.datePickerMode = .date
} else {
// Fallback on earlier versions
}
Для более ранних версий у меня раньше не было этой проблемы, поэтому я надеюсь, что с решением все в порядке, но, пожалуйста, прокомментируйте, если вы столкнулись с проблемой также и с более ранними версиями, чтобы я мог адаптировать свой код!:-)
Примечание: я заметил, что datePickerMode установлен в режим по умолчанию после изменения предпочтительного DatePickerStyle, поэтому убедитесь, что вы принудительно установили datePickerMode после этого!
Я обнаружил, что если я установил цвет текста datepicker с помощью self.datePicker.setValue(UIColor.Theme.whiteColor, forKeyPath: "textColor"), то это вызвало сбой приложения при загрузке представления. Попробуйте удалить эту строку кода, и она должна работать с катализатором Mac.