Поделиться через


Элемент управления "Выбор" в Xamarin.iOS

Позволяет UIPickerView выбрать значение из списка путем прокрутки отдельных компонентов интерфейса, например колесика.

Средства выбора часто используются для выбора даты и времени; Apple предоставляет UIDatePicker класс для этой цели.

В статье описывается, как реализовать и использовать UIPickerView элементы управления и UIDatePicker элементы управления.

UIPickerView

Реализация средства выбора

Реализация средства выбора путем создания экземпляра нового UIPickerView:

UIPickerView pickerView = new UIPickerView(
    new CGRect(
        UIScreen.MainScreen.Bounds.X - UIScreen.MainScreen.Bounds.Width,
        UIScreen.MainScreen.Bounds.Height - 230,
        UIScreen.MainScreen.Bounds.Width,
        180
    )
);

Средства выбора и раскадровки

Чтобы создать средство выбора в конструкторе iOS, перетащите представление средства выбора из панели элементов в область конструктора.

Перетащите представление средства выбора в область конструктора

Работа с элементом управления выбора

Средство выбора использует модель для взаимодействия с данными:

public override void ViewDidLoad()
{
    base.ViewDidLoad();
    var pickerModel = new PeopleModel(personLabel);
    personPicker.Model = pickerModel;
}

Базовый UIPickerViewModel класс реализует два интерфейса: IUIPickerDataSource и IUIPickerViewDelegate, которые объявляют различные методы, которые указывают данные средства выбора и как он обрабатывает взаимодействие:

public class PeopleModel : UIPickerViewModel
{
    public string[] names = new string[] {
            "Amy Burns",
            "Kevin Mullins",
            "Craig Dunn",
            "Joel Martinez",
            "Charles Petzold",
            "David Britch",
            "Mark McLemore",
            "Tom Opegenorth",
            "Joseph Hill",
            "Miguel De Icaza"
        };

    private UILabel personLabel;

    public PeopleModel(UILabel personLabel)
    {
        this.personLabel = personLabel;
    }

    public override nint GetComponentCount(UIPickerView pickerView)
    {
        return 2;
    }

    public override nint GetRowsInComponent(UIPickerView pickerView, nint component)
    {
        return names.Length;
    }

    public override string GetTitle(UIPickerView pickerView, nint row, nint component)
    {
        if (component == 0)
            return names[row];
        else
            return row.ToString();
    }

    public override void Selected(UIPickerView pickerView, nint row, nint component)
    {
        personLabel.Text = $"This person is: {names[pickerView.SelectedRowInComponent(0)]},\n they are number {pickerView.SelectedRowInComponent(1)}";
    }

    public override nfloat GetComponentWidth(UIPickerView picker, nint component)
    {
        if (component == 0)
            return 240f;
        else
            return 40f;
    }

    public override nfloat GetRowHeight(UIPickerView picker, nint component)
    {
        return 40f;
    }

Средство выбора может иметь несколько столбцов или компонентов. Компоненты секционирует средство выбора в несколько разделов, что позволяет упростить и более конкретный выбор данных:

Средство выбора с двумя компонентами

Чтобы указать количество компонентов в средстве выбора, используйте Метод GetComponentCount.

Настройка внешнего вида средства выбора

Чтобы настроить внешний вид средства выбора, используйте UIPickerView.UIPickerViewAppearance класс или переопределение GetViewGetRowHeight методов в объекте UIPickerViewModel.

UIDatePicker

Реализация средства выбора дат

Реализация средства выбора дат путем создания экземпляра :UIDatePicker

UIPickerView pickerView = new UIPickerView(
    new CGRect(
        UIScreen.MainScreen.Bounds.X - UIScreen.MainScreen.Bounds.Width,
        UIScreen.MainScreen.Bounds.Height - 230,
        UIScreen.MainScreen.Bounds.Width,
        180
     )
);

Средства выбора дат и раскадровки

Чтобы создать средство выбора дат в конструкторе iOS, перетащите средство выбора дат из панели элементов в область конструктора.

Перетащите средство выбора дат в область конструктора

Свойства средства выбора даты

Минимальная и максимальная дата

MinimumDate и MaximumDate ограничить диапазон дат, доступных в средстве выбора дат. Например, следующий код ограничивает средство выбора дат до 6 лет, ведущих к настоящему моменту:

var calendar = new NSCalendar(NSCalendarType.Gregorian);
var currentDate = NSDate.Now;
var components = new NSDateComponents();
components.Year = -60;
NSDate minDate = calendar.DateByAddingComponents(components, currentDate, NSCalendarOptions.None);
datePickerView.MinimumDate = minDate;
datePickerView.MaximumDate = currentDate;

Совет

Можно явно привести к DateTimeNSDate:

DatePicker.MinimumDate = (NSDate)DateTime.Today.AddDays (-7);
DatePicker.MaximumDate = (NSDate)DateTime.Today.AddDays (7);

Интервал минуты

Свойство MinuteInterval задает интервал, с которым средство выбора будет отображать минуты:

datePickerView.MinuteInterval = 10;

Режим

Средства выбора дат поддерживают четыре режима, описанные ниже.

UIDatePickerMode.Time

UIDatePickerMode.Time отображает время с селектором часов и минут и необязательным обозначением AM или PM:

datePickerView.Mode = UIDatePickerMode.Time;

UIDatePickerMode.Time

UIDatePickerMode.Date

UIDatePickerMode.Date отображает дату с селектором месяца, дня и года:

datePickerView.Mode = UIDatePickerMode.Date;

UIDatePickerMode.Date

Порядок селекторов зависит от языкового стандарта средства выбора даты, который по умолчанию использует языковой стандарт системы. На рисунке выше показан макет селекторов в языковом en_US стандарте, но следующие изменения порядка на Day | Месяц | Год:

datePickerView.Locale = NSLocale.FromLocaleIdentifier("en_GB");

День | Месяц | Год

UIDatePickerMode.DateAndTime

UIDatePickerMode.DateAndTime отображает сокращенное представление даты, время в часах и минутах, а также необязательное обозначение AM или PM (в зависимости от того, используется ли 12 или 24 часов):

datePickerView.Mode = UIDatePickerMode.DateAndTime;

UIDatePickerMode.DateAndTime

Как и в UIDatePickerMode.Dateслучае, порядок селекторов и использование часов в 12 или 24 часах зависит от языкового стандарта средства выбора дат.

Совет

Date Используйте свойство для записи значения средства выбора даты в режиме UIDatePickerMode.TimeилиUIDatePickerMode.DateUIDatePickerMode.DateAndTime. Это значение хранится в виде NSDate.

UIDatePickerMode.CountDownTimer

UIDatePickerMode.CountDownTimer отображает значения часов и минут:

datePickerView.Mode = UIDatePickerMode.CountDownTimer;

Свойство CountDownDuration фиксирует значение средства выбора даты в UIDatePickerMode.CountDownTimer режиме. Например, чтобы добавить значение отсчета до текущей даты:

var currentTime = NSDate.Now;
var countDownTimerTime = datePickerView.CountDownDuration;
var finishCountdown = currentTime.AddSeconds(countDownTimerTime);

dateLabel.Text = "Alarm set for:" + coundownTimeformat.ToString(finishCountdown);

NSDateFormatter

Чтобы отформатировать NSDateобъект , используйте .NSDateFormatter

Чтобы использовать NSDateFormatterметод , вызовите его ToString метод. Например:

var date = NSDate.Now;
var formatter = new NSDateFormatter();
formatter.DateStyle = NSDateFormatterStyle.Full;
formatter.TimeStyle = NSDateFormatterStyle.Full;
var formattedDate = formatter.ToString(d);
// Tuesday, August 14, 2018 at 11:20:42 PM Mountain Daylight Time
DateFormat

Свойство DateFormat (строка) позволяет NSDateFormatter настроить спецификацию формата дат:

NSDateFormatter dateFormat = new NSDateFormatter();
dateFormat.DateFormat = "yyyy-MM-dd";
TimeStyle

Свойство TimeStyleNSDateFormatterStyle ) NSDateFormatter определяет форматирование времени на основе предопределенных стилей:

NSDateFormatter timeFormat = new NSDateFormatter();
timeFormat.TimeStyle = NSDateFormatterStyle.Short;

Различные NSDateFormatterStyle значения отображаются следующим образом:

  • NSDateFormatterStyle.Full: 7:46:00 Восточное дневное время
  • NSDateFormatterStyle.Long: 7:47:00 PM EDT
  • NSDateFormatterStyle.Medium: 7:47:00 ВЕЧЕРА
  • NSDateFormatterSytle.Short: 7:47 ВЕЧЕРА
DateStyle

Свойство DateStyle (a NSDateFormatterStyle) NSDateFormatter указывает форматирование дат на основе предопределенных стилей:

NSDateFormatter dateTimeformat = new NSDateFormatter();
dateTimeformat.DateStyle = NSDateFormatterStyle.Long;

Различные NSDateFormatterStyle значения отображают даты следующим образом:

  • NSDateFormatterStyle.Full: среда, 2 августа 2017 г. в 7:48 вечера
  • NSDateFormatterStyle.Long: 2 августа 2017 г. в 7:49 вечера
  • NSDateFormatterStyle.Medium: 2 августа 2017 г., 7:49 вечера
  • NSDateFormatterStyle.Short: 8.2.17, 7:50

Примечание.

DateFormat и DateStyle/TimeStyle укажите различные способы указания форматирования даты и времени. Последние заданные свойства определяют выходные данные модуля форматирования даты.