#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 ");
}
}
}