【问题标题】:Monotouch UIPickerView ValueChange Event for ViewControllerViewController 的 Monotouch UIPickerView ValueChange 事件
【发布时间】:2016-07-25 11:35:35
【问题描述】:

如果UIPickerView 更改其任何组件中的值,我想获取事件,以便我的UIViewController 可以更改Labels。我只遇到了PickerView 模型提供的一种有用的方法:

public override void Selected(UIPickerView pickerView, nint row, nint component) 

当任何事情发生变化时,模型都会反映相应的变化。但是,如果我想将这些更改反映回ViewController,我应该怎么做?我想做的工作就像 Delegates 在 iOS 中所做的那样。我对c#不太熟悉。任何帮助表示赞赏。谢谢。

public partial class ViewController : UIViewController  
{

    public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.
            setupHandlers();
        }

   void setupHandlers()
        {
            pickerModel = new UnitPickerViewModel();
            pickerModel.Items = lengthArray;
            pickerModel.setDataForSecondComponent(lengthArray2);

            pickerView = new UIPickerView();
            pickerView.BackgroundColor = UIColor.LightGray;
            pickerView.DataSource = pickerModel;

        }
}

【问题讨论】:

    标签: c# xamarin xamarin.ios uipickerview


    【解决方案1】:

    您可以创建弱和强 Obj-C 风格的委托:

    强大的代表:

    创建一个嵌套的UIPickerViewDelegate 类在你的UIViewController 类:

        class PickerDelegate : UIPickerViewDelegate
        {
            public override void Selected(UIPickerView pickerView, nint row, nint component)
            {
                base.Selected(pickerView, row, component);
                Console.WriteLine(row.ToString());
            }
        }
    

    创建代理并将其分配给您的UIPickerView:

    var picker = new UIPickerView(UIScreen.MainScreen.Bounds);
    picker.DataSource = this;
    picker.Delegate = new PickerDelegate();
    

    弱代理:

    跳过嵌套类并将 UIPicker 选择的方法添加到您的 UIViewController 并用 Foundation.Export 标记它:

    [Export("pickerView:didSelectRow:inComponent:")]
    public void Selected(UIPickerView pickerView, nint row, nint component)
    {
        Console.WriteLine(row.ToString());
    }
    

    将您的UIViewController 指定为弱委托:

    var picker = new UIPickerView(UIScreen.MainScreen.Bounds);
    picker.DataSource = this;
    picker.WeakDelegate = this;
    Add(picker); 
    

    【讨论】:

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