【发布时间】:2013-11-17 00:19:50
【问题描述】:
我正在我的应用中开发注册功能。我有一些UITextFields,比如电子邮件、密码、用户名、名字……我想在向服务器发出请求之前验证它们。现在我在关闭键盘时验证它们:
-(BOOL) textFieldShouldReturn:(UITextField *)textField{
if (textField == emailTextField)
{
if(emailTextField.text.length > 5){
if(![self validateEmailWithString:emailTextField.text])
{
// user entered invalid email address
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Enter a valid email address." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return NO;
//email.text=@"";
} else {
[self.emailDelegate sendEmailForCell:emailTextField.text];
[textField resignFirstResponder];
return YES;
}
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Email address too Short" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return NO;
}
}
return YES;
}
- (BOOL) validateEmailWithString:(NSString *)emailStr
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:emailStr];
}
但是,当我不使用textFieldShouldReturn 方法关闭键盘时,我无法验证我正在输入的UITextField。我的意思是,当我在键盘中按回车键之前单击下一个UITextField 时,我可以输入下一个UITextField 和textFieldShouldReturn 从未被调用过。
所以,我想我应该使用这种方法 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string,但我不想在用户每次输入字母时都向用户显示这是无效的电子邮件(或传递,或其他)。
所以,我的问题是当用户停止在键盘上输入字母但在他关闭键盘之前,我该如何管理此验证?
另一个问题。我可以将这个方法的布尔值shouldChangeCharactersInRange 存储在一个变量中吗?
谢谢
【问题讨论】:
标签: ios iphone objective-c validation uitextfield