验证 UITextField 并在错误时显示 UIAlertView

Posted

技术标签:

【中文标题】验证 UITextField 并在错误时显示 UIAlertView【英文标题】:Validating UITextField and Display an UIAlertView if error 【发布时间】:2014-07-23 18:55:06 【问题描述】:

如果有错误,我想验证 UITextField 并显示 UIAlertView。

之前我使用了下面的代码。它与 2 个 UITextfields 完美配合,但对于许多 UITextfield,这是不可能的。

任何提示如何显示 UIAlertView 来验证我的 UITexfields 吗?

- (void)processFieldEntries 

    NSString *usernameString = usernameField.text;
    NSString *passwordString = passwordField.text;
    NSString *firstNameString = firstNameField.text;
    NSString *nameString = nameField.text;
    NSString *cityString = cityField.text;

    NSString *errorText = @"Enter";
    NSString *usernameBlankText = @" a username";
    NSString *passwordBlankText = @" a password";
    NSString *prenomBlankText = @" a firstname";
    NSString *nomBlankText = @" a name";
    NSString *joinText = @", ";

    BOOL textError = NO;

    if (identifiantString.length == 0 || motDePasseString.length == 0 || prenomString.length == 0 || nomString.length == 0 || idPoubelle.length == 0) 
        textError = YES;

        if (usernameString.length == 0) 
            errorText = [errorText stringByAppendingString:usernameBlankText];
        

        if (usernameString.length == 0 || passwordString.length == 0) 
            if (usernameString.length == 0)  
                errorText = [errorText stringByAppendingString:joinText];
            
            errorText = [errorText stringByAppendingString:passwordBlankText];
        
     

    if (textError) 
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorText message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
        [alertView show];
        return;
    

【问题讨论】:

为什么不能验证超过 2 个文本字段? 当然可以,但是如果我要写所有的情况,代码会很长 【参考方案1】:

我会这样做:

- (void)processFieldEntries 
    NSString *usernameString = usernameField.text;
    NSString *passwordString = passwordField.text;
    NSString *firstNameString = firstNameField.text;
    NSString *nameString = nameField.text;
    NSString *cityString = cityField.text;

    NSMutableArray *errors = [NSMutableArray array];

    if (usernameString.length == 0) 
        [errors addObject:@"a username"];
    

    if (passwordString.length == 0) 
        [errors addObject:@"a password"];
    

    if (firstNameString.length == 0) 
        [errors addObject:@"a first name"];
    

    if (nameString.length == 0) 
        [errors addObject:@"a name"];
    

    if (errors.count) 
        NSString *message = [NSString stringWithFormat:@"Enter %@", [errors componentsJoinedByString:@", "]];

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Errors" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
    

当然,这并不能很好地扩展。考虑创建一组文本字段和错误消息。然后,您可以迭代数组,而不是编写一长串 if 语句。

【讨论】:

【参考方案2】:

您还可以在用户输入信息时进行一些额外的检查,例如,名称不应包含数字或字母以外的其他符号。

一个不错的方法是从 View Controller 类实现 UITextFieldDelegate 协议。

然后为每个 UITextField 对象设置 tag 属性。

协议有这个有用的方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

每次您在任何文本框中计时时都会调用它。

然后你可以检查:

switch (textfield.tag)

 case TEXT_FIELD_FOR_FIRST_NAME_TAG:
 
  if (!validateFirstNameFunction)  /* Display some error */ 

  break;
 

 case TEXT_FIELD_FOR_LAST_NAME_TAG:
 
  if (!validateLastNameFunction)  /* Display some error */ 

  break;
 

 // And so on...


尝试分离功能,这将使代码更清晰,更具可读性。

希望它也能给你带来一些价值:)

【讨论】:

以上是关于验证 UITextField 并在错误时显示 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

从按钮操作中调用变量并在出现错误时显示错误消息

在 Mutation 中出现错误时显示 SnackBar Material UI

在整个应用程序中使用的通用 UI 控件[关闭]

csharp 触发错误消息并在满足条件时显示在屏幕上

表单验证错误消息以角度提交时显示

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图