Средство визуализации выбора даты в iOS 14

#xamarin.forms #custom-renderer

#xamarin.forms #пользовательское средство визуализации

Вопрос:

У меня возникли некоторые трудности с выяснением того, как правильно обновить существующий пользовательский средство визуализации, которое у меня есть для выбора даты на iOS, чтобы отображать указатель даты с другим предпочтительным стилем, как указано в этой статье здесь (хотя это для swift) https://medium.com/better-programming/introducing-swifts-new-modern-date-picker-37bb5e0a106

Мой способ визуализации выглядит следующим образом:

 public class BorderlessDatePickerRenderer : DatePickerRenderer
    {
        
        public override void LayoutSubviews()
        {
            base.LayoutSubviews();
            
            
            var element = Element as BorderlessDatePicker;
            Control.BorderStyle = UITextBorderStyle.None;
            if (element.Date.Year == 1900) {
                    Control.Text = "";
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            var element = Element as BorderlessDatePicker;

            if (Control != null amp;amp; element.Date.Year == 1900) {
                    Control.Text = "";
            }
        }
  

Сам BorderlessDatePicker по себе это просто пустой класс, который расширяет Xamarin для выбора даты.Управление формами. Корень моих проблем в том, что я не уверен, как правильно установить PreferredDatePickerStyle для моего объекта управления, учитывая, что элемент управления представляет собой UITextField под капотом вместо UIDatePicker . По сути, то, что я хотел бы сделать, это вместо отображения средства выбора даты с использованием compact стиля, который, по-видимому, используется по умолчанию для iOS 14, я бы хотел, чтобы он отображался как wheels вместо того, чтобы делать что-то вроде:

PreferredDatePickerStyle = UIDatePickerStyle.Wheels;

Ответ №1:

После еще нескольких исследований и просмотра xamarin github я наткнулся на это решение:

 protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
    {
        base.OnElementChanged(e);

        if(e.NewElement != null amp;amp; this.Control != null)
        {
            try
            {
                if (UIDevice.CurrentDevice.CheckSystemVersion(14, 0))
                {
                    UIDatePicker picker = (UIDatePicker)Control.InputView;
                    picker.PreferredDatePickerStyle = UIDatePickerStyle.Wheels;
                }

            } catch (Exception ex)
            {
                Log.Error(ex, "Failed to set PreferredDatePickerStyle to be UIDatePickerStyle.Wheels for iOS 14.0 ");
            }
        }
    }