【问题标题】:Xamarin.ios add DatePickerView and PickerView in AlertControllerXamarin.ios 在 AlertController 中添加 DatePicker View 和 UIPickerView
【发布时间】:2018-01-18 13:25:49
【问题描述】:

可以像这样将 DatePicker 和 PickerView 放在 xamarin.ios 中的警报控制器中吗? Example image

我试过这个:

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

这是结果: Result image

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

【问题讨论】:

    标签: c# xamarin xamarin.ios uipickerview uidatepicker


    【解决方案1】:

    我认为我们可以创建自己的UITextField 来实现您的截图效果,这里是我的自定义文本字段供您参考:

    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(将您的日期选择器放入其中)和InputAccessoryView(带有“完成”的工具栏)

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

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

    【讨论】:

    • @StefanoToppi 很高兴它对您有所帮助。
    【解决方案2】:

    来自Apple Documentation

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

    您可以使用自定义控制器或视图,您将从头开始构建,以模态方式呈现和关闭并完全控制。

    我认为你可以在 AlertController 上获得的最高级别的自定义是你可以在这里找到的:

    Tutorial to add textfields / buttons on alert

    【讨论】:

    • 感谢重播,其他问题可以插入弹出窗口吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多