我正在创建一个应用程序,其中我根据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
}
但是当我将光标移动到第二个文本字段时,第一个文本字段不执行此操作。非常感谢您提前获得任何帮助。
答案 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.