如何在xamarin中禁用/取消撤消按钮
问题描述:
我正在创建一个具有条目的应用程序。我试图限制条目只允许数字输入。我已经尝试过使用Keyboard =“Numeric”。然而,对于iPad而言,键盘的字符数不仅仅是数字。所以我不得不限制输入的内容。然而,当我这样做时,如果用户键入括号,例如,它确实会停止输入字符。但是如果用户按下撤消,则会崩溃。我认为这是因为软件键盘与应用程序分离,所以它正在寻找该括号字符,但它不在那里。这里是我的代码:如何在xamarin中禁用/取消撤消按钮
private void Entry_TextChanged(object sender, TextChangedEventArgs e)
{
Entry theEntry = (Entry)sender;
string entryText = theEntry.Text;
if(entryText != null && entryText.Length != 0)
{
char theMostRecentInput = entryText[entryText.Length - 1];
if(!Extension.IsNumeric(theMostRecentInput))
{
theEntry.TextChanged -= Entry_TextChanged;
theEntry.Text = e.OldTextValue;
theEntry.TextChanged += Entry_TextChanged;
}
}
}
感谢您的帮助!
答
我会在Entry
自定义渲染这样你就可以通过ShouldChangeCharacters
控制输入,而不必通过允许输入,然后不得不删除的处理程序和更改文本回到旧值杂牌它做到这一点。 ..
下面是一个允许数字的快速示例,它也自动处理粘贴非数字字符串的剪贴板,因为这些字符串将被禁止。我正在使用NSCharacterSet.DecimalDigits
字符集,因为这会被操作系统国际化,但是您可以允许/禁止任何您选择的字符。
你也可以包括触觉,视觉或听觉反馈上不允许使用/拒绝的条目...
[assembly: ExportRenderer(typeof(NumericEntry), typeof(NumericEntryRenderer))]
namespace Forms_PCL_Tester.iOS
{
public class NumericEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Entry> e)
{
base.OnElementChanged(e);
if (e.NewElement != e.OldElement)
if (Control != null)
{
Control.KeyboardType = UIKeyboardType.NumbersAndPunctuation;
Control.ShouldChangeCharacters += (UITextField textField, NSRange range, string replacementString) =>
{
foreach (var aChar in replacementString)
if (!NSCharacterSet.DecimalDigits.Contains(aChar))
return false;
return true;
};
}
}
}
}
不知道如何解决这个问题,但你有另一个错误。你假设最近输入的字符是字符串中的最后一个字符。更好的方法可能是在用户完成表单时验证数字,并通知用户该字符串是否包含无效字符。在用户输入的文本框中设置字符串将导致意外的结果。 – Slepz