繁体   English   中英

Xamarin.ios在AlertController中添加DatePickerView和PickerView

[英]Xamarin.ios add DatePickerView and PickerView in AlertController

可以将DatePicker和PickerView放在xamarin.ios的Alert控制器中吗? 范例图片

我已经试过了:

UIDatePicker datePickerView = new UIDatePicker(new CGRect(0, 0, this.View.Frame.Width, 300));
        var calendar = new NSCalendar(NSCalendarType.Gregorian);
        var currentDate = NSDate.Now;
        var components = new NSDateComponents();

        components.Year = -60;

        NSDate minDate = calendar.DateByAddingComponents(components, NSDate.Now, NSCalendarOptions.None);

        datePickerView.MinimumDate = minDate;
        datePickerView.MaximumDate = NSDate.Now;
        datePickerView.Mode = UIDatePickerMode.Date;


        UIAlertController actionSheetAlert = UIAlertController.Create("Data di nascita", "Seleziona un'opzione dalla lista", UIAlertControllerStyle.ActionSheet);


        actionSheetAlert.View.AddSubview(datePickerView);

        actionSheetAlert.AddAction(UIAlertAction.Create("Aggiungi", UIAlertActionStyle.Default, (action) => {

        }));

        actionSheetAlert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Destructive, (action) => Console.WriteLine("Cancel button pressed.")));


        this.PresentViewController(actionSheetAlert, true, null);

这是结果: 结果图像

你能提供一个完整的例子吗? 谢谢!!!!

Apple文档中

UIAlertController类旨在按原样使用,不支持子类化。 此类的视图层次结构是私有的,不能修改。

您可以使用的是自定义控制器或从头开始构建的视图,您可以模态显示和关闭它们并对其进行完全控制。

我认为您可以在AlertController上获得的最高级别的自定义设置是:

在警报上添加文本字段/按钮的教程

我认为我们可以创建自己的UITextField来从您的屏幕截图中获得效果,这是我自定义的textField,供您参考:

public class MyTextField : UITextField
{
    private UIDatePicker inputView;
    private UIView inputAccessoryView;
    public override UIView InputView
    {
        get
        {
            if (inputView == null)
            {
                UIDatePicker datePickerView = new UIDatePicker();
                var calendar = new NSCalendar(NSCalendarType.Gregorian);
                var currentDate = NSDate.Now;
                var components = new NSDateComponents();

                components.Year = -60;

                NSDate minDate = calendar.DateByAddingComponents(components, NSDate.Now, NSCalendarOptions.None);

                datePickerView.MinimumDate = minDate;
                datePickerView.MaximumDate = NSDate.Now;
                datePickerView.Mode = UIDatePickerMode.Date;

                inputView = datePickerView;
            }
            return inputView;
        }
    }

    public override UIView InputAccessoryView
    {
        get
        {
            if (inputAccessoryView == null)
            {
                UIToolbar toolbar = new UIToolbar(new CGRect(0, 0, UIScreen.MainScreen.Bounds.Size.Width, 44));
                UIBarButtonItem item = new UIBarButtonItem(UIBarButtonSystemItem.Done, (sender, args) =>
                {
                    NSDateFormatter formatter = new NSDateFormatter();
                    formatter.DateFormat = "dd/MM/yyyy HH:mm";
                    this.Text = formatter.ToString(inputView.Date);
                    this.ResignFirstResponder();
                });
                UIBarButtonItem flexibleItem = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace, null);
                toolbar.SetItems((new UIBarButtonItem[] { flexibleItem, item }), false);

                inputAccessoryView = toolbar;
            }
            return inputAccessoryView;
        }
    }
}

覆盖InputView (将您的datePicker放入其中)和InputAccessoryView (带有“完成”的工具栏)

最后,我们可以像这样使用它:

MyTextField textField = new MyTextField();
textField.Placeholder = "Enter something";
textField.Frame = new CGRect(0, 100, 200, 200);
View.AddSubview(textField);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM