iPhone:UITextfield验证

时间:2011-09-20 09:39:36

标签: iphone ios

我在S.O检查了现有的例子,对于我的情况,您认为哪一个更好,

在一个视图中有很多文本字段,我想在用户编辑特定文本字段时验证它们,否则我必须在用户按下屏幕旁边的时候验证它们,而不是我显示所有验证消息不想打扰。我想以两种不同的方式验证文本字段,如果它是一个数字输入我想在定义的范围内验证它,例如,如果数字介于5和1000之间,或者如果它是文本,那么文本的长度是否在定义的范围内例如2到10个字符。并且用户必须能够输入超出范围的任何输入。

哪个更好;

使用textField:shouldChangeCharactersInRange

或类似的东西:

[textField addTarget:self action:@selector(validateField:) forControlEvents:UIControlEventEditingChanged];

无论是哪种情况,我如何检查运行时输入的数字是否在范围内,并且不允许用户输入更大或更小的数字

3 个答案:

答案 0 :(得分:0)

好的。

你的问题的答案是 1)将标记值设置为所有文本字段。 2)使用UIControlEventEditingDidBegin并触发一种方法来验证当前文本字段之前的文本字段。

 [textfield1 setTag:1];
   [textfield2 setTag:2];// make sure to set tag values incrementally
   [textfield2 addTarget:self @selector(validate:) forControlEvents:UIControlEventEditingDidBegin];
-(void) validate:(id) sender
{
    // 10 is the number of textfields, change it accordingly.

    if(sender.tag!=1 && sender.tag!=10)
    {

          //validate textfield with tag sender.tag-1
    }
    else
    {
         //handle first and last textfield here
    }
}

试试这个,这可能会解决你的问题。

答案 1 :(得分:0)

实际上,你的两种方法都会很好!使用delegate的{​​{1}}来调用UITextField并执行验证,与使用 Target&操作的。在这两种情况下,你定义一个接收调用textField:shouldChangeCharactersInRange作为参数的处理程序(这是@Anil Kumar在他的答案中建议标记文本字段的一个实现。但这实际上甚至不需要,你可以只需直接在文本字段上调用UITextField来检查是否相等)。

就个人而言,我倾向于使用委托来完成这些任务。

更新:如果您想真正了解此问题,请使用Reactive Cocoa。 Ray Wenderlich Gang的April Tech Talk有一个很棒的会话,还讨论了验证的问题,所以它只是符合你的情况! :)

答案 2 :(得分:0)

看看快速开发的TextFieldValidator