选择器的Done按钮的Event_Handler [英] Event_Handler of the Done button of a picker

查看:181
本文介绍了选择器的Done按钮的Event_Handler的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个xamarin选择器的项目列表,我想删除选择器当iPhone上的完成按钮和Android上的Oke按钮。

我有代码删除选择器。但是我不知道这个可能是什么event_Handler。



代码:

  Picker picker = new Picker 
{
标题=插槽中有什么?,
VerticalOptions = LayoutOptions.CenterAndExpand
// Horizo​​ntalOptions = LayoutOptions.Center

};

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


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


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

}
else
{
//更改单元格和按钮的值
选择器选择器=(选择器)发送方;
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 ==choose item)
{

}

}

iPhone上的样子示例:



解决方案

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


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


这是已知的问题,我采取引自这里



您应该结合SelectedIndexChanged和Unfocus事件来实现您的目标。您可以在此主题中找到一些解决方案
https://论坛.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看起来像从


I have a xamarin picker with a list of items and I want to remove the picker when the "done" button is pressed on iPhone and "Oke" button on android.
I have the code to remove the picker. But i don't know what event_Handler that might by.

Code:

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")
    {

    }

}

Example of what it looks like on iPhone:

解决方案

Unfortunately, you cannot use the same event for Android and iOS in your case, because:

Currently the Picker control sends the SelectedIndexChanged event on Android after the OK button is pressed. However, on iOS the event is sent whenever the user scrolls the picker and lets it stop on an item

It's known issue, I take quote from here.

You should combine SelectedIndexChanged and Unfocus events to achieve your goal. You can find some solutions here in this topic https://forums.xamarin.com/discussion/20847/picker-selection-event

UPD: Looks like I didn't understand your question right. If I did it right now, so you have to use custom renderers and specify needed logic in them.

For iOS. Create custom renderer inherited of PickerRenderer and implement something like that:

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;
        }
    }

For Andorid looks like it works from the box

这篇关于选择器的Done按钮的Event_Handler的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆