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.

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