Элемент управления "Выбор" в 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
класс или переопределение GetView
GetRowHeight
методов в объекте 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;
Совет
Можно явно привести к DateTime
NSDate
:
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.Date
UIDatePickerMode.Date
отображает дату с селектором месяца, дня и года:
datePickerView.Mode = UIDatePickerMode.Date;
Порядок селекторов зависит от языкового стандарта средства выбора даты, который по умолчанию использует языковой стандарт системы. На рисунке выше показан макет селекторов в языковом en_US
стандарте, но следующие изменения порядка на Day | Месяц | Год:
datePickerView.Locale = NSLocale.FromLocaleIdentifier("en_GB");
UIDatePickerMode.DateAndTime
UIDatePickerMode.DateAndTime
отображает сокращенное представление даты, время в часах и минутах, а также необязательное обозначение AM или PM (в зависимости от того, используется ли 12 или 24 часов):
datePickerView.Mode = UIDatePickerMode.DateAndTime;
Как и в UIDatePickerMode.Date
случае, порядок селекторов и использование часов в 12 или 24 часах зависит от языкового стандарта средства выбора дат.
Совет
Date
Используйте свойство для записи значения средства выбора даты в режиме UIDatePickerMode.Time
илиUIDatePickerMode.Date
UIDatePickerMode.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
Свойство TimeStyle
(а NSDateFormatterStyle
) NSDateFormatter
определяет форматирование времени на основе предопределенных стилей:
NSDateFormatter timeFormat = new NSDateFormatter();
timeFormat.TimeStyle = NSDateFormatterStyle.Short;
Различные NSDateFormatterStyle
значения отображаются следующим образом:
NSDateFormatterStyle.Full
: 7:46:00 Восточное дневное времяNSDateFormatterStyle.Long
: 7:47:00 PM EDTNSDateFormatterStyle.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
укажите различные способы указания форматирования даты и времени. Последние заданные свойства определяют выходные данные модуля форматирования даты.