2011-09-25 44 views
0

我已经搜索了一个答案,但无法找到与此相关的答案。输入每个字符后验证文本字段

我想验证每个输入到一个文本字段,但不知道如何去做,这个想法是检查服务器上存在的用户名,所以我会假设我需要发布到服务器每次输入的东西如果成功做了什么。

可能有人请告知我将不胜感激。

+0

检查此链接:http://stackoverflow.com/questions/5765654/textfield-validation-with-regular-expression。真的令人印象深刻的答案..它帮助我。祝你好运 – Meet

回答

2

您可以使用addTarget:action:forControlEvents:UIControlEventValueChanged(例如:[textfield addTarget:self action:@selector(usernameChanged:) forControlEvents:UIControlEventValueChanged)。这会在文本更改后通知您(因此,当您收到usernameChanged:时,您将进行最后修改)。

这可能是一个好主意,每当用户名发生变化时,您可以不发送请求到服务器,而是在文本字段丢失字幕或从最后一次更改过去一段时间时发送请求(您可以使用NSTimer )。

您应该使用单个异步请求。如果请求处于活动状态并再次编辑文本字段,则应取消该请求并将其设置为零(因为没有理由检查旧用户名)。如果请求成功显示图标,或者从服务器获取结果时想执行的操作。

编辑: 不知道UIControlEventValueChanged工作在iOS上的早期版本,或者如果它是从我身边一个错误,但它似乎没有任何失效。应该使用UIControlEventEditingChanged

+0

非常感谢你的帮助我会研究这也似乎是最好的方式去!谢谢 – SirL0fty

2

实现委托方法textField:shouldChangeCharactersInRange:replacementString:大约每次更改文本予以通报。根据您是否要接受更改,返回YESNO

这可能是一个非常糟糕的主意,要求服务器为每一个按键的批准,因为这会造成不可承受的滞后,导致非常糟糕的用户体验。

+0

嗨,奥莱感谢您的回复,你能为我提供某种例子,请即时通讯,这是所有这一切。谢谢 – SirL0fty

+0

不,我不会为你写代码,因为我认为这对学习不好。 UITextField的文档和上面列出的方法可以帮助你。 –

+0

谢谢Ole我欣赏那! :) – SirL0fty

2

Ole说的是绝对正确的。我只是给你一个他想说的例子。

首先符合你的类的UITextFieldDelegate协议。然后,确保在viewDidLoad(或类似),您的委托设置为你的类:

myTextField.delegate = self; 

接下来,你可以实现奥莱刚提过的方法。然而,在你的情况你不验证用户能否输入任何内容或没有,你只是想知道什么进入这样你就可以在网上进行验证。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    [self verifyTheUserWithUsername:[textField.text stringByReplacingCharactersInRange:range withString:string]]; 
    //do your appropriate check here 
    return YES; //we allow the user to enter anything 
} 
+0

'[self verifyTheUserWithUsername:textField。文本];在'shouldChangeCharactersInRange:'方法中不能很好地工作,因为它在应用到文本字段之前通知编辑。 –

+0

感谢你的例子队友我现在就试试这个! – SirL0fty

+0

@ SirL0fty:我会毫不犹豫地选择Ole和babbidi提到的建议。在每次按键之后检查服务器是否会让您的应用程序崩溃。启动一个计时器并使其失效,如果按下另一个键肯定会是要走的路。我建议像检查间隔时间一样。 –