我在S.O检查了现有的例子,对于我的情况,您认为哪一个更好,
在一个视图中有很多文本字段,我想在用户编辑特定文本字段时验证它们,否则我必须在用户按下屏幕旁边的时候验证它们,而不是我显示所有验证消息不想打扰。我想以两种不同的方式验证文本字段,如果它是一个数字输入我想在定义的范围内验证它,例如,如果数字介于5和1000之间,或者如果它是文本,那么文本的长度是否在定义的范围内例如2到10个字符。并且用户必须能够输入超出范围的任何输入。
哪个更好;
使用textField:shouldChangeCharactersInRange
或类似的东西:
[textField addTarget:self action:@selector(validateField:) forControlEvents:UIControlEventEditingChanged];
无论是哪种情况,我如何检查运行时输入的数字是否在范围内,并且不允许用户输入更大或更小的数字
答案 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