C# Monotouch UITextField仅限数字
我找不到任何解决方案如何限制C# Monotouch UITextField仅限数字,c#,xamarin.ios,uitextfield,character,C#,Xamarin.ios,Uitextfield,Character,我找不到任何解决方案如何限制文本字段在Monotouch中只允许数字 另外,我希望不超过8个字符。实现这一点的最简单方法是创建您自己的控件,该控件继承自UITextField,然后创建一个从UITextFieldDelegate继承的委托,并将其指定为控件的委托 在代理的ShouldChangeCharacters覆盖方法中,可以对新输入的文本执行适当的测试,如果无效,可以返回false以防止文本字段被更新。在MonoTouch/C#中,有一种更好的方法将文本字段限制为数字 textCardNu
文本字段
在Monotouch中只允许数字
另外,我希望不超过8个字符。实现这一点的最简单方法是创建您自己的控件,该控件继承自
UITextField
,然后创建一个从UITextFieldDelegate
继承的委托,并将其指定为控件的委托
在代理的ShouldChangeCharacters
覆盖方法中,可以对新输入的文本执行适当的测试,如果无效,可以返回false以防止文本字段被更新。在MonoTouch/C#中,有一种更好的方法将文本字段限制为数字
textCardNumber.ShouldChangeCharacters = (UITextField textField, NSRange range, string replace) => {
int dummy;
return replace.Length == 0 || int.TryParse (replace, out dummy);
};
编辑:
增加了删除功能。要在MonoTouch中实现仅数值UITextField
s,我使用以下代码:
var numberTextField = new UITextField { KeyboardType = UIKeyboardType.NumberPad };
numberTextField.ShouldChangeCharacters = (textField, range, replacement) =>
{
int number;
return replacement.Length == 0 || int.TryParse(replacement, out number);
};
以及限制特定数量的字符:
const int maxCharacters = 8;
textField.ShouldChangeCharacters = (textField, range, replacement) =>
{
var newContent = new NSString(textField.Text).Replace(range, new NSString(replacement)).ToString();
return newContent.Length <= maxCharacters;
};
const int maxCharacters=8;
textField.ShouldChangeCharacters=(textField,range,replacement)=>
{
var newContent=new NSString(textField.Text).Replace(范围,new NSString(replacement)).ToString();
返回newContent.Length
{
var newContent=new NSString(textField.Text).Replace(范围,new NSString(replacement)).ToString();
整数;
return newContent.Length如果您想为可重用代码创建UITextField子类,我就是这么做的
[Register("CustomTextField")]
public class CustomTextField : UITextField
{
public CustomTextField() : base() {}
public CustomTextField(IntPtr handle) : base(handle)
{
Delegate = new CustomDelegate();
}
private class CustomDelegate : UITextFieldDelegate
{
public override bool ShouldChangeCharacters(UITextField textField, NSRange range, string replacementString)
{
int maxCharacters = 8;
var newContent = new NSString(textField.Text).Replace(range, new NSString(replacement)).ToString();
int number;
return newContent.Length <= maxCharacters && (replacement.Length == 0 || int.TryParse(replacement, out number));
}
}
[注册(“CustomTextField”)]
公共类CustomTextField:UITextField
{
公共CustomTextField():base(){}
公共CustomTextField(IntPtr句柄):基本(句柄)
{
Delegate=新CustomDelegate();
}
私有类CustomDelegate:UITextFieldDelegate
{
公共覆盖布尔ShouldChangeCharacters(UITextField textField、NSRange range、string replacementString)
{
int maxCharacters=8;
var newContent=new NSString(textField.Text).Replace(范围,new NSString(replacement)).ToString();
整数;
return newContent.Length好的,有没有办法用ShouldChangeTextInRange方法来实现这一点?是的,对于UITextView,您可以按照上面的顺序执行,但是使用代理的ShouldChangeText方法。您的答案不允许从文本字段中删除字符,因为replace.Length>0
。不应该是一个| |而不是一个&&?
[Register("CustomTextField")]
public class CustomTextField : UITextField
{
public CustomTextField() : base() {}
public CustomTextField(IntPtr handle) : base(handle)
{
Delegate = new CustomDelegate();
}
private class CustomDelegate : UITextFieldDelegate
{
public override bool ShouldChangeCharacters(UITextField textField, NSRange range, string replacementString)
{
int maxCharacters = 8;
var newContent = new NSString(textField.Text).Replace(range, new NSString(replacement)).ToString();
int number;
return newContent.Length <= maxCharacters && (replacement.Length == 0 || int.TryParse(replacement, out number));
}
}