选择器的完成按钮的Event_Handler

时间:2017-02-12 21:24:01

标签: c# xamarin event-handling picker

我有一个带有项目列表的xamarin选择器,我想在iPhone上按下“完成”按钮并在android上按下“Oke”按钮时删除选择器。
我有删除选择器的代码。但我不知道可能会发生什么event_Handler。

代码:

Picker picker = new Picker
    {
        Title = "What's in the slot?",
        VerticalOptions = LayoutOptions.CenterAndExpand
        //HorizontalOptions = LayoutOptions.Center 

    };

private void Displaypickerview(int row, int column)
    {
        if (status == "filling board")
        {
            foreach (string text in pickerText)
            {


picker.Items.Add(text);
        }
        foreach (string ore in oreLevels)
        {
            picker.Items.Add(ore);
        }


        picker.SelectedIndexChanged += (sender, args) =>
        {
            if (picker.SelectedIndex == -1)
            {

            }
            else
            {
                //change value of cell and button
                Picker picker = (Picker)sender;
                int index = picker.SelectedIndex;

                if (index < pickerText.Length)
                {
                    board[row, column].Text = pickerText[index - 1];
                }
                else {
                    board[row, column].Text = oreLevels[index - 1 - pickerText.Length];
                }
            }
        };
    }
    else if (status == "choosing item")
    {

    }

}

iPhone上的样子示例:

Picker

2 个答案:

答案 0 :(得分:6)

不幸的是,在您的情况下,您不能对Android和iOS使用相同的事件,因为:

  

当前Picker控件在按下OK按钮后在Android上发送SelectedIndexChanged事件。但是,在iOS上,只要用户滚动选择器并让它停在项目

上,就会发送事件

已知问题,我引用了here

您应该结合SelectedIndexChanged和Unfocus事件来实现您的目标。您可以在本主题中找到一些解决方案 https://forums.xamarin.com/discussion/20847/picker-selection-event

<强> UPD: 看起来我没理解你的问题。如果我现在就这样做了,那么你必须使用自定义渲染器并在其中指定所需的逻辑。

适用于iOS。创建继承PickerRenderer的自定义渲染器并实现类似的东西:

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

        var extendedPicker = e.NewElement as ExtendedPicker;
        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("Done",
                UIBarButtonItemStyle.Done,
                delegate {
                    Control.ResignFirstResponder();
                })
        };

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

对于Andorid看来它可以从框中运行

答案 1 :(得分:5)

现在有一个特定于平台的配置选项,可让您在iOS上启用此功能。

您在特定选择器上指定一个PickerMode,仅在有人在iOS上点击完成后才进行选择。

<ContentPage ...
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core">
    <StackLayout Margin="20">
        <Picker ... Title="Select a monkey" ios:Picker.UpdateMode="WhenFinished">
          ...
        </Picker>
        ...
    </StackLayout>
</ContentPage>

Picker.On<iOS>方法指定此特定于平台的仅在iOS上运行。 Xamarin.Forms.PlatformConfiguration.iOSSpecific名称空间中的Picker.SetUpdateMode方法用于控制项目选择的时间,UpdateMode枚举提供两个可能的值:

Immediately –在用户浏览选择器中的项目时进行项目选择。这是Xamarin.Forms中的默认行为。

WhenFinished –仅当用户按下选择器中的“完成”按钮时,才进行项目选择。

阅读文档以获取有关控制的更多信息。 https://docs.microsoft.com/sr-latn-rs/xamarin/xamarin-forms/platform/ios/picker-selection