首页 > 解决方案 > 当用户单击不滚动时如何更改所选项目

问题描述

iOSSpecific:Picker.UpdateMode="WhenFinished"我在搜索后发现选择器更新模式有问题添加到我的自定义选择器后找到此行“ ”未更改

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
    base.OnElementChanged(e);
    var extendedPicker = e.NewElement as CustomPicker;
    if (extendedPicker == null) return;

    var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f));

    toolbar.Items = new[]
    {
    new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
    new UIBarButtonItem("Yes",
        UIBarButtonItemStyle.Done,
        delegate {
            Control.ResignFirstResponder();
        })
    };

    if (this.Control != null)
    {
        Control.InputAccessoryView = toolbar;
    }
}

标签: xamarinxamarin.formsxamarin.ios

解决方案


设置新UIToolbar的forControl.InputAccessoryView时,需要手动设置选定的for值。Control

在渲染器中尝试以下代码:

public class CustomPickerRenderer : PickerRenderer, IUIPickerViewDelegate, IUIPickerViewDataSource
{
    string SelectedValue;

    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        SelectedValue = Element.Items[0];

        UIPickerView pickerView = (UIPickerView)Control.InputView;
        pickerView.WeakDelegate = this;
        pickerView.DataSource = this;
        pickerView.Delegate = new deleagteClass();

        var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f));

        toolbar.Items = new[]
        {
            new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
            new UIBarButtonItem("Yes",
                UIBarButtonItemStyle.Done,
                delegate {
                    Control.ResignFirstResponder();
                    Control.Text = SelectedValue;
                })
        };

        if (this.Control != null)
        {
            Control.InputAccessoryView = toolbar;
        }
    }

    public nint GetComponentCount(UIPickerView pickerView)
    {
        return 1;
    }

    public nint GetRowsInComponent(UIPickerView pickerView, nint component)
    {
        return Element.Items.Count;
    }

    [Export("pickerView:viewForRow:forComponent:reusingView:")]
    public UIView GetView(UIPickerView pickerView, nint row, nint component, UIView view)
    {

        UILabel label = new UILabel
        {
            TextColor = UIColor.Black,
            Text = Element.Items[(int)row].ToString(),
            TextAlignment = UITextAlignment.Center,
        };
        var picker = this.Element;
        return label;
    }

    [Export("pickerView:didSelectRow:inComponent:")]
    public void Selected(UIPickerView pickerView, nint row, nint component)
    {
        SelectedValue = Element.Items[(int)row];
    }
}

效果:

在此处输入图像描述


推荐阅读