我有一个带有项目列表的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上的样子示例:
答案 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