Share via


Controllo selezione in Xamarin.iOS

Un UIPickerView consente di selezionare un valore da un elenco scorrendo singoli componenti di un'interfaccia simile a una rotellina.

I picker vengono spesso usati per selezionare una data e un'ora; Apple fornisce il UIDatePicker classe a questo scopo.

L'articolo descrive come implementare e usare i UIPickerView controlli e UIDatePicker .

UIPickerView

Implementazione di una selezione

Implementare una selezione creando un'istanza di un nuovo UIPickerViewoggetto :

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

Selezione e storyboard

Per creare una selezione in Progettazione iOS, trascinare una visualizzazione selezione dalla casella degli strumenti all'area di progettazione.

Trascinare una visualizzazione selezione nell'area di progettazione

Uso di un controllo selezione

Una selezione usa un modello per interagire con i dati:

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

La UIPickerViewModel classe base implementa due interfacce, IUIPickerDataSource e IUIPickerViewDelegate, che dichiarano vari metodi che specificano i dati di una selezione e il modo in cui gestisce l'interazione:

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;
    }

Una selezione può avere più colonne o componenti. I componenti partizionano una selezione in più sezioni, consentendo una selezione dei dati più semplice e più specifica:

Selezione con due componenti

Per specificare il numero di componenti in una selezione, usare MetodoGetComponentCount .

Personalizzazione dell'aspetto di una selezione

Per personalizzare l'aspetto di una selezione, usare UIPickerView.UIPickerViewAppearanceclasse o eseguire l'override UIPickerViewModeldei GetView metodi e GetRowHeight in .

UIDatePicker

Implementazione di una selezione data

Implementare una selezione data creando un'istanza UIDatePickerdi :

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

Selezione data e storyboard

Per creare una selezione data in Progettazione iOS, trascinare un controllo Selezione data dalla casella degli strumenti all'area di progettazione.

Trascinare una selezione data nell'area di progettazione

Proprietà selezione data

Data minima e massima

MinimumDate e MaximumDate limitano l'intervallo di date disponibili nella selezione data. Ad esempio, il codice seguente vincola una selezione data ai sessanta anni che portano fino al momento attuale:

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;

Suggerimento

È possibile eseguire il cast esplicito di un oggetto DateTime a un NSDateoggetto :

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

Intervallo di minuti

La MinuteInterval proprietà imposta l'intervallo in cui verrà visualizzato il controllo selezione minuti:

datePickerView.MinuteInterval = 10;

Modalità

I selettore data supportano quattro modalità, descritte di seguito:

UIDatePickerMode.Time

UIDatePickerMode.Time visualizza l'ora con un selettore di ore e minuti e una designazione AM o PM facoltativa:

datePickerView.Mode = UIDatePickerMode.Time;

UIDatePickerMode.Time

UIDatePickerMode.Date

UIDatePickerMode.Date visualizza la data con un selettore mese, giorno e anno:

datePickerView.Mode = UIDatePickerMode.Date;

UIDatePickerMode.Date

L'ordine dei selettori dipende dalle impostazioni locali della selezione data, che per impostazione predefinita usa le impostazioni locali di sistema. L'immagine precedente mostra il layout dei selettori nelle en_US impostazioni locali, ma l'ordine seguente viene modificato in Day | Mese | Anno:

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

Giorno | Mese | Anno

UIDatePickerMode.DateAndTime

UIDatePickerMode.DateAndTime visualizza una visualizzazione abbreviata della data, l'ora in ore e minuti e una designazione AM o PM facoltativa (a seconda che venga usato un orologio di 12 o 24 ore):

datePickerView.Mode = UIDatePickerMode.DateAndTime;

UIDatePickerMode.DateAndTime

Come con UIDatePickerMode.Date, l'ordine dei selettori e l'uso di un orologio di 12 o 24 ore dipende dalle impostazioni locali della selezione data.

Suggerimento

Usare la Date proprietà per acquisire il valore di una selezione data in modalità UIDatePickerMode.Time, UIDatePickerMode.Dateo UIDatePickerMode.DateAndTime. Questo valore viene archiviato NSDatecome .

UIDatePickerMode.CountDownTimer

UIDatePickerMode.CountDownTimer visualizza i valori di ora e minuto:

datePickerView.Mode = UIDatePickerMode.CountDownTimer;

La CountDownDuration proprietà acquisisce il valore di una selezione data in UIDatePickerMode.CountDownTimer modalità . Ad esempio, per aggiungere il valore del conto alla rovescia alla data corrente:

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

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

NSDateFormatter

Per formattare un oggetto NSDate, usare un oggetto NSDateFormatter.

Per usare un NSDateFormatteroggetto , chiamare il relativo ToString metodo. Ad esempio:

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

La DateFormat proprietà (stringa) di un NSDateFormatter consente una specifica del formato di data personalizzabile:

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

La TimeStyle proprietà (un NSDateFormatterStyle oggetto di specifica NSDateFormatter la formattazione dell'ora in base agli stili predeterminati:

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

Diversi NSDateFormatterStyle valori visualizzano i tempi di visualizzazione come indicato di seguito:

  • NSDateFormatterStyle.Full: 7:46:00 Ora legale orientale
  • NSDateFormatterStyle.Long: 7:47:00 EDT
  • NSDateFormatterStyle.Medium: 7:47:00 PM
  • NSDateFormatterSytle.Short: 19:47
DateStyle

La DateStyle proprietà (un NSDateFormatterStyle) di un NSDateFormatter oggetto specifica la formattazione della data in base agli stili predeterminati:

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

Diversi NSDateFormatterStyle valori visualizzano le date come indicato di seguito:

  • NSDateFormatterStyle.Full: mercoledì 2 agosto 2017 alle 17:48
  • NSDateFormatterStyle.Long: 2 agosto 2017 alle 17:49
  • NSDateFormatterStyle.Medium: 2 agosto 2017, 17:49
  • NSDateFormatterStyle.Short: 2/8/17, 17:50

Nota

DateFormat e DateStyle/TimeStyle offrono diversi modi per specificare la formattazione di data e ora. Le proprietà impostate più di recente determinano l'output del formattatore di data.