Xaml Xamarin表单应用程序:键盘型电话允许在Android中输入负值,但在IOS中不允许

Xaml Xamarin表单应用程序:键盘型电话允许在Android中输入负值,但在IOS中不允许,xaml,xamarin,xamarin.ios,xamarin.android,xamarin.forms,Xaml,Xamarin,Xamarin.ios,Xamarin.android,Xamarin.forms,我已经在Xamarin提出申请。用xaml设计UI。我的问题是,当我在输入字段中定义键盘电话时,它允许在android应用程序中输入负值,但在IOS中不允许输入负值 <StackLayout Spacing="20" Padding="0" Orientation="Horizontal" HorizontalOptions="FillAndExpand"> <Entry T

我已经在Xamarin提出申请。用xaml设计UI。我的问题是,当我在输入字段中定义键盘电话时,它允许在android应用程序中输入负值,但在IOS中不允许输入负值

<StackLayout Spacing="20" Padding="0" Orientation="Horizontal" HorizontalOptions="FillAndExpand">
            <Entry Text="{Binding Item.TextProvider2017}" HorizontalTextAlignment="End" FontSize="Small" WidthRequest="140" MinimumWidthRequest="60" Placeholder="For 2017" Keyboard="Telephone" Completed="NoOfProvider_Completed" Unfocused="NoOfProvider_Unfocused"/>
            <Entry Text="{Binding Item.TextProvider2018}" HorizontalTextAlignment="End" FontSize="Small" WidthRequest="140" MinimumWidthRequest="60" Placeholder="For 2018" Keyboard="Telephone"/>
            <Entry Text="{Binding Item.TextProvider2019}" HorizontalTextAlignment="End" FontSize="Small" WidthRequest="140" MinimumWidthRequest="60" Placeholder="For 2019" Keyboard="Telephone"/>
            <Entry Text="{Binding Item.TextProvider2020}" HorizontalTextAlignment="End" FontSize="Small" WidthRequest="140" MinimumWidthRequest="60" Placeholder="For 2020" Keyboard="Telephone"/>
        </StackLayout>

Android键盘:

IOS中的键盘:

在安卓系统中,键盘有负号,但IOS没有。有没有办法使两者相同。

这是旧答案,请参阅下面的更新版本

您需要为具有UWP和Android默认行为的
条目
控件创建一个自定义的
InputAccessoryView
,同时将自定义的
InputAccessoryView
添加到iOS
UITextField

以下是iOS自定义渲染器的外观:

class MinusButtonEntryRenderer : EntryRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);
        if (Control == null) return;

        UIBarButtonItem button = new UIBarButtonItem("-", UIBarButtonItemStyle.Plain, (sender, args) =>
        {
            var position = Control.SelectedTextRange.Start;
            var idx = (int) Control.GetOffsetFromPosition(Control.BeginningOfDocument, position);
            Element.Text.Insert(idx, "-");
        });
        UIToolbar toolbar = new UIToolbar()
        {
            Items = new [] { button }
        };
        Control.InputAccessoryView = toolbar;
    }
}
此代码位于PCL中,允许我们访问XAML的效果:

public class MinusButtonEntryEffect : RoutingEffect
{
    public MinusButtonEntryEffect () : base ("Xamarin.MinusButtonEntryEffect") { }
}
因此,您的XAML将如下所示:

<Entry Text="{Binding Item.TextProvider2017}" HorizontalTextAlignment="End" FontSize="Small" WidthRequest="140" MinimumWidthRequest="60" Placeholder="For 2017" Keyboard="Telephone">
    <Entry.Effects>
        <local:MinusButtonEntryEffect />
    </Entry.Effects>
</Entry>

谢谢Micah的重播,我是Xamarin的初学者,所以请告诉我在哪里写这段代码。在.iOS部分或通用代码中。@user2017279请查看我的更新答案。我已经提供了一种更简单的方法来实现您想要的。感谢您的帮助,我尝试了它编译的更新代码,但当我在模拟器上运行IOS应用程序时,应用程序在启动后崩溃。@user2017279您能否共享您正在使用的更新代码以及导致它崩溃的任何异常?谢谢
<Entry Text="{Binding Item.TextProvider2017}" HorizontalTextAlignment="End" FontSize="Small" WidthRequest="140" MinimumWidthRequest="60" Placeholder="For 2017" Keyboard="Telephone">
    <Entry.Effects>
        <local:MinusButtonEntryEffect />
    </Entry.Effects>
</Entry>
xmlns:local="clr-namespace:MyApp"