【问题标题】:Monotouch get UiPickerView selected itemMonotouch 获取 UiPickerView 选中项
【发布时间】:2013-04-12 16:35:45
【问题描述】:

我在操作表中以编程方式创建了一个自定义 uipicker,现在我需要设置一个文本字段,其中包含选择器的选定项目。使用日期选择器,我得到这样的值:

 actionSheetDatePicker.DatePicker.ValueChanged += (s, e) => {
                this.lblCheckOut.Text = f.ToString ((s as UIDatePicker).Date);
            };

现在我正在尝试对我的 UIPickerView 做同样的事情,但我没有 ValueChanged 方法。

有没有人可以帮我获取用我的选择器选择的项目的价值。

提前致谢。

【问题讨论】:

    标签: ios xamarin.ios uipickerview


    【解决方案1】:

    为了详细说明 Jason 的回答,这里是一个使用 UIPickerView 作为自定义日期选择器的代码示例。希望它可以帮助某人。

    UIPickerView datePicker = new UIPickerView ();
    var mod = new DatePickerDataModel ();
    datePicker.Model = mod;
    
    mod.ValueChanged += (object sender, EventArgs e) => {
        _selectedDate = mod.SelectedItem;
    };
    
    
    class DatePickerDataModel : UIPickerViewModel
        {
            public event EventHandler<EventArgs> ValueChanged;
    
            public List<DateTime> Items { get; private set; }
    
            public DateTime SelectedItem {
                get { return Items [selectedIndex]; }
            }
    
            int selectedIndex = 0;
    
            public DatePickerDataModel ()
            {
                var items = new List<DateTime> ();
                for (int i = 0; i < 14; i++) {
                    items.Add (DateTime.Now.Subtract (TimeSpan.FromDays (i)));
                }
                Items = items;
            }
    
            public override nint GetRowsInComponent (UIPickerView picker, nint component)
            {
                return Items.Count;
            }
    
            public override nint GetComponentCount (UIPickerView picker)
            {
                return 1;
            }
    
            public override void Selected (UIPickerView picker, nint row, nint component)
            {
                selectedIndex = (int)row;
                ValueChanged?.Invoke(this, EventArgs.Empty());
            }
    
            public override string GetTitle (UIPickerView pickerView, nint row, nint component)
            {
                var t = Items [(int)row];
                var m = t.ToString ("MMM");
                var d = t.ToString ("ddd");
                return $"{d} {m} {t.Day}";
            }
    
            public override nfloat GetRowHeight (UIPickerView picker, nint component)
            {
                return 44;
            }
        }
    

    【讨论】:

      【解决方案2】:

      UIPickerViewDelegate 有一个 Selected 方法,您可以使用该方法在用户选择一个值时引发事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多