簡體   English   中英

Xamarin Forms日期和時間選擇器

[英]Xamarin Forms date and time picker

我正在使用Xamarin Forms制作跨平台應用程序,並且需要創建一個簡單的視圖供用戶選擇日期和時間,類似於: 在Xamarin iOS中選擇 要創建的視圖 Android解決方案已准備就緒,但我需要在同一應用程序中為iOS創建解決方案

我不能與Xamarin Forms分開使用標准日期選擇器和另一個標准時間選擇器。 我需要創建自定義解決方案(一個視圖-簡單地選擇日期和時間)。

我試圖在Xamarin Forms中創建視圖,該視圖由2個水平方向的列表組成(一個用於日期,一個用於時間),但是當我選擇一個位置時,該列表不會滾動到視圖的中間,並且也不會自動當我上下滾動列表時選擇中間位置元素。 我想創建類似Xamarin-iOS解決方案的東西:“日期和時間選擇器”,但使用Xamarin Forms。

我還嘗試在Xamarin-iOS中創建項目“日期和時間選擇器”的一部分。 我有main.storyboard和視圖控制器,但我不知道如何在Xamarin Forms中從Xamarin-iOS顯示視圖並傳遞選定的日期和時間。

你能幫我嗎?

如果要在Xamarin.Forms中使用本機視圖,請在此處閱讀: https ://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/platform/native-views/

如果要在iOS平台的Xamarin.Forms上實現日期時間選擇器,則可以使用CustomRenderer

形式

創建Picker的子類

public class MyPicker:Picker
{
    public MyPicker()
    {

    }
}

並將其添加到xaml中

<StackLayout VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand">
    <!-- Place new controls here -->

    <local:MyPicker  WidthRequest="150"  BackgroundColor="AliceBlue"/>

</StackLayout>

在iOS中

創建Picker的渲染Picker 。您可以根據需要設置Picker格式

using System;

using Foundation;
using UIKit;
using ObjCRuntime;

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

using xxx;
using xxx.iOS;

[assembly:ExportRenderer(typeof(MyPicker),typeof(MyPickerRenderer))]
namespace xxx.iOS
{
  public class MyPickerRenderer:PickerRenderer
  {

    string SelectedValue;

    public MyPickerRenderer()
    {

    }

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

        if(Control!=null)
        {
            SetTimePicker();
        }

    }


    void  SetTimePicker()
    {
        UIDatePicker picker = new UIDatePicker
        {
            Mode = UIDatePickerMode.DateAndTime
        };

        picker.SetDate(NSDate.Now,true);

        picker.AddTarget(this,new Selector("DateChange:"),UIControlEvent.ValueChanged);

        Control.InputView = picker;


        UIToolbar toolbar = (UIToolbar)Control.InputAccessoryView;

        UIBarButtonItem done = new UIBarButtonItem("Done", UIBarButtonItemStyle.Done, (object sender, EventArgs click) =>
        {
            Control.Text = SelectedValue;
            toolbar.RemoveFromSuperview();
            picker.RemoveFromSuperview();
            Control.ResignFirstResponder();
            MessagingCenter.Send<Object, string>(this, "pickerSelected", SelectedValue);



        });

        UIBarButtonItem empty = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace, null);

        toolbar.Items = new UIBarButtonItem[] { empty, done };

    }

    [Export("DateChange:")]
    void DateChange(UIDatePicker picker)
    {
        NSDateFormatter formatter = new NSDateFormatter();

        formatter.DateFormat = "MM-dd HH:mm aa"; //you can set the format as you want

        Control.Text = formatter.ToString(picker.Date);

        SelectedValue= formatter.ToString(picker.Date);

        MessagingCenter.Send<Object, string>(this,"pickerSelected",SelectedValue);
    }
  }
}

並使用MessagingCenter傳遞選定的日期和時間。

public MainPage()
{
    InitializeComponent();

    MessagingCenter.Subscribe<Object, string>(this, "pickerSelected", (sender, arg) => {
        Console.WriteLine(arg);
        //arg is the selected date and time
    });

}

我已經在github上上傳了演示,您可以下載它進行測試。

效果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM