我正在我的应用程序中开发注册功能。我有一些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
吗?
谢谢