我们如何在警报的文本字段下显示自定义错误消息?

时间:2017-01-26 09:36:52

标签: ios objective-c iphone xcode

任何人都可以建议我在提醒和取消按钮的警报中有一个电子邮件字段。

我有Bool函数,该函数返回我在UIAlertAction中使用的电子邮件验证结果,并显示带有NSLog语句的自定义消息。

我的问题是当用户按下提交按钮并且bool值为零时,我想在UITextField中显示输入的电子邮件文本以及文本底部的红色错误消息领域。在将bool值返回为1之前,警报也应可见。

代码:

UIAlertController * alert=   [UIAlertController 
                                 alertControllerWithTitle:@"Forgot Password" 
                                 message:@"" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* submit = [UIAlertAction 
                             actionWithTitle:@"Submit" 
                             style:UIAlertActionStyleDefault
                             handler:^(UIAlertAction * action) {
                               //Do Some action here
                               UITextField *alertTextField = alert.textFields.firstObject;

                               NSLog(@"%d",[self validateEmailWithString:alertTextField.text]);
                               int returnValue = (int)[self validateEmailWithString:alertTextField.text];
                               NSLog(@"interger value %i",returnValue);
                               if ( returnValue == 1) {
                                   NSLog(@"correct format");
                               }else
                                 NSLog(@"wrong format");

                        }];
UIAlertAction* cancel = [UIAlertAction 
                             actionWithTitle:@"Cancel" 
                             style:UIAlertActionStyleDefault
                             handler:^(UIAlertAction * action) {
                                [alert dismissViewControllerAnimated:YES completion:nil];
                        }];

[alert addAction:submit];
[alert addAction:cancel];

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
    textField.placeholder = @"Enter your E-Mail Address";
    _enteredEMail = textField.text;
    NSLog(@"%@ntered Email Address",textField.text);

1 个答案:

答案 0 :(得分:0)

UIAlertController不支持文本字段底部的红色错误消息,但您可以更改文本字段的颜色。

添加此方法以检查textField.text的长度,或者您可以添加电子邮件验证检查,然后启用提交按钮。

submit.enabled = NO; //after submit button UIAlertAction set 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
        {
             NSString *finalString = [textField.text stringByReplacingCharactersInRange:range withString:string];
             [submit setEnabled:(finalString.length >= 1)];
             // for textField border colour 
             textField.layer.borderColor=[[UIColor redColor]CGColor];
             textField.layer.borderWidth= 2.0f;
             return YES;
        }

如果returnValue == 0,您无法按住该对话框,但可以从提交按钮操作再次调用它。

if ( returnValue == 0) {
    NSLog(@"correct format");
}
else{
    NSLog(@"wrong format");
    [self presentViewController:alert animated:YES completion:nil];
}

另请参阅UIAlertView Text Input and Validation