如何在目标c中对多个文本字段进行验证

时间:2016-08-02 14:18:02

标签: uitextfield uialertcontroller

我正在创建一个应用程序,其中我根据Web服务数据动态显示组件。当我有多个文本字段时,我无法正确执行验证/它没有正确执行委托方法。如果我在第一个文本字段中键入内容后单击第二个文本字段,我在textFieldDidEndEditing中编写的用于验证的代码永远不会为textfield1执行。

我在循环中对文本字段使用相同的变量,如下所示:

for(int i=0;i<[textfields count];i++)
{
_barcodeTextfield = [UITextField alloc] init];
_barcodeTextfield.delegate = self;
[QuestionView addSubView:_barcodeTextField];
}

验证方法是用textfieldDidEndEditing方法编写的,用于在验证失败时显示警告。

 if(textField== _barcodeTextField)
{
//do the validation
}

但是当我将光标移动到第二个文本字段时,第一个文本字段不执行此操作。非常感谢您提前获得任何帮助。

2 个答案:

答案 0 :(得分:0)

在for循环中,还要将标签添加到UITextField。

for(int i=0;i<[textfields count];i++)  {
    _barcodeTextfield = [UITextField alloc] init];
    _barcodeTextfield.delegate = self;
    _barcodeTextfield.tag = i;
    [QuestionView addSubView:_barcodeTextField];
}

您应该在输入后立即收集文本,方法是将文本字段的代理设置为视图控制器

- (void)textFieldDidEndEditing:(UITextField *)textField {

    if (textField.tag == 1) {
        // Store the first name in a property, or array, or something.
    } Continue the same for other textfields

    //Perform Validation
    [self performValidation];
  }

PerformValidation将是这样的。

-(void)performValidation {

if (firstProperty.length == 0) {
    //Display alert
}
}

答案 1 :(得分:0)

由于向文本字段添加验证的这种复杂性,我创建了一个类JSInputField(它是UITextField的子类)。您可以使用一行代码向文本字段添加任何验证。

JSInputField *inputField = [[JSInputField alloc] initWithFrame:CGRectMake(10, 100, 300, 50)];
[self.view addSubview:inputField];
[inputField setPlaceholder:@"Input Text"];
[inputField setRoundedCorners:UIRectCornerAllCorners];
[inputField addValidationRule:JSCreateRuleNotNullValue]; //This will validate field for null value. It will show error if field is empty.
[inputField addValidationRule:JSCreateRuleLength(10)];  //This will validate field for string of length equal to or less than 10.


JSInputField *inputField = [[JSInputField alloc] initWithFrame:CGRectMake(10, 100, 300, 50)];
[self.view addSubview:inputField];
[inputField setPlaceholder:@"Input Number"];
[inputField setRoundedCorners:UIRectCornerAllCorners];
[inputField addValidationRule:JSCreateRuleNotNullValue]; //This will validate field for null value. It will show error if field is empty.
[inputField addValidationRule:JSCreateRuleNumeric(0)];  //This will validate field for numeric values and restrict to enter value upto 0 decimal places.