【问题标题】:MvvmCross: Cannot add more than one UIPickerViewMvvmCross:不能添加多个 UIPickerView
【发布时间】:2014-06-11 04:50:18
【问题描述】:

我正在使用 Xamarin 和 MvvmCross 构建一个 iOS 视图,我遇到了一个有趣的小问题。我似乎无法向 UIView 添加多个 UIPickerView。

添加一个视图,一切正常。添加一秒钟,当我尝试打开页面时,模拟器就会挂起。

这似乎与带有 InputView 的 UITextField 有关,因为如果我尝试添加 UIDatePicker 也会遇到问题。

调试输出没有什么奇怪的。

代码如下:

[Register("EditJobViewJobView")]
public class EditJobView : MvxViewController
{
    public new EditJobViewModel ViewModel
    {
        get { return (EditJobViewModel)base.ViewModel; }
    }

    private const float _leftMargin = 6;
    private const float _labelHeight = 20;
    private const float _pickerHeight = 28;

    private readonly UIFont _labelFont = UIFont.BoldSystemFontOfSize(18f);
    private readonly UIFont _controlFont = UIFont.SystemFontOfSize(18f);

    private readonly UIView _paddingInsert = new UIView(new RectangleF(0, 0, 4, 0));

    private int _currentTop = 0;

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        View = new UIView() { BackgroundColor = UIColor.White };

        NavigationItem.SetRightBarButtonItem(new UIBarButtonItem("Save", UIBarButtonItemStyle.Bordered,
            (sender, args) => ViewModel.OkCommand.Execute(null)), true);

        // ios7 layout
        if (RespondsToSelector(new Selector("edgesForExtendedLayout")))
            EdgesForExtendedLayout = UIRectEdge.None;

        Title = "Edit Job";

        AddLabel("Job Status");
        MvxPickerViewModel jobStatusPickerViewModel;
        var jobStatusTextView = AddPickerView(out jobStatusPickerViewModel);

        AddLabel("Job Priority");
        MvxPickerViewModel jobPriorityPickerViewModel;
        var jobPriorityTextView = AddPickerView(out jobPriorityPickerViewModel);

        var set = this.CreateBindingSet<EditJobView, EditJobViewModel>();

        set.Bind(jobStatusPickerViewModel).For(p => p.SelectedItem).To(vm => vm.SelectedJobStatusType);
        set.Bind(jobStatusPickerViewModel).For(p => p.ItemsSource).To(vm => vm.JobStatusTypes);
        set.Bind(jobStatusTextView).To(vm => vm.SelectedJobStatusType);

        set.Bind(jobPriorityPickerViewModel).For(p => p.SelectedItem).To(vm => vm.SelectedJobPriority);
        set.Bind(jobPriorityPickerViewModel).For(p => p.ItemsSource).To(vm => vm.JobPriorities);
        set.Bind(jobPriorityTextView).To(vm => vm.SelectedJobPriority);

        set.Apply();
    }

    private void AddLabel(string caption)
    {
        _currentTop += 10;
        var frame = new RectangleF(_leftMargin, _currentTop, 300, _labelHeight);
        var label = new UILabel(frame);
        label.Font = _labelFont;
        label.Text = caption;
        AddView(label);
        _currentTop += 2;
    }

    private UITextField AddPickerView(out MvxPickerViewModel pickerViewModel)
    {
        var textField = AddTextField();

        var pickerView = new UIPickerView();
        pickerViewModel = new MvxPickerViewModel(pickerView);
        pickerView.Model = pickerViewModel;
        pickerView.ShowSelectionIndicator = true;

        textField.InputView = pickerView;

        return textField;
    }

    private UITextField AddTextField()
    {
        var frame = new RectangleF(_leftMargin, _currentTop, 300, _pickerHeight);
        var textField = new UITextField(frame);
        textField.Layer.BorderColor = UIColor.Black.CGColor;
        textField.Layer.BorderWidth = 1f;
        textField.Font = _controlFont;
        textField.LeftView = _paddingInsert;
        textField.LeftViewMode = UITextFieldViewMode.Always;
        AddView(textField);
        return textField;
    }

    private void AddView(UIView view)
    {
        View.AddSubview(view);
        _currentTop += (int)view.Frame.Height;
    }
}

有什么想法吗?

【问题讨论】:

    标签: xamarin.ios mvvmcross


    【解决方案1】:

    这是由于在多个 UITextField 中创建共享填充插入造成的。

    为了解决这个问题,我改变了

    textField.LeftView = _paddingInsert;
    

    textField.LeftView = new UIView(new RectangleF(0, 0, 4, 0));
    

    【讨论】:

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