4

我没有找到任何解决方案如何限制textfieldMonotouch 中只允许数字。

我也希望有不超过 8 个字符。

4

4 回答 4

7

为了UITextField在 MonoTouch 中实现仅数字 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;
var numberTextField = new UITextField { KeyboardType = UIKeyboardType.NumberPad };
numberTextField.ShouldChangeCharacters = (textField, range, replacement) =>
    {
        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));
    };
于 2013-09-22T20:19:51.510 回答
2

实现这一点的最简单方法是创建自己的继承自 的控件UITextField,然后创建继承自的委托UITextFieldDelegate并将其分配为控件的Delegate.

在委托的ShouldChangeCharactersoverride 方法中,您可以对新输入的文本执行适当的测试,如果它无效,您可以返回 false 以防止更新文本字段。

于 2013-01-10T18:51:46.210 回答
2

在 MonoTouch/C# 中,这是将文本字段限制为数字的更好方法。

textCardNumber.ShouldChangeCharacters = (UITextField textField, NSRange range, string replace) => {
        int dummy;
        return replace.Length == 0 || int.TryParse (replace, out dummy);
};

编辑:增加了能够删除的能力。

于 2013-04-18T17:08:38.537 回答
0

如果您想将 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));
     }
}

ShouldChangeCharacters 的内容只是从 redent84 的答案中复制和粘贴的。我只想给出这个答案来展示如何继承 UITextField。

此外,如果您使用我的方法,则不能像 Redent84 那样在 UITextField 上使用委托,因为您会收到运行时错误,说明委托已分配。

如果不创建委托子类,我不知道如何做到这一点。

此外,不要忘记将可视化编辑器中文本字段的类更改为 CustomTextField 或您决定命名的任何名称。

于 2017-02-11T23:45:57.963 回答