Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Monotouch UITextField仅限数字_C#_Xamarin.ios_Uitextfield_Character - Fatal编程技术网

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