检查UITextFields的文本

时间:2013-09-06 22:37:19

标签: ios objective-c cocoa-touch

我的应用程序上有一个视图控制器,用户可以在其中输入个人信息。有一个取消选项可以提取警报,通知他们如果没有保存,他们将丢失数据。如果此视图控制器中的任何文本字段具有[.text.length&gt ;,我只想显示此警报。 0](我有大约20个文本字段,如果有任何一个字符,它应该拉出警报)。我可以手动命名if语句中的每个文本字段,但希望有一些方法来检查视图控制器中的所有文本字段?

这是我到目前为止所拥有的:

for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        UITextField *textField = (UITextField *)view;
        if(textField.text.length >= 1){
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Cancel?"
                                                                message:@"If you leave before saving, the athlete will be lost. Are you sure you want to cancel?"
                                                               delegate:self
                                                      cancelButtonTitle:@"No"
                                                      otherButtonTitles:@"Yes", nil];

            [alertView show];
        }
        if(textField.text.length == 0){
            [[self navigationController] popViewControllerAnimated:YES];
        }
    }
}

我想检查是否有任何带有值的文本字段,但是这会导致错误,因为它在完成for循环之前检查textField.text.length == 0。

解决方案:

BOOL areAnyTextFieldsFilled = NO;
for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        UITextField *textField = (UITextField *)view;
        if(textField.text.length >= 1){
            areAnyTextFieldsFilled = YES;

        }

    }
}
if(areAnyTextFieldsFilled == YES){
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Cancel?"
                                                        message:@"If you leave before saving, the athlete will be lost. Are you sure you want to cancel?"
                                                       delegate:self
                                              cancelButtonTitle:@"No"
                                              otherButtonTitles:@"Yes", nil];

    [alertView show];
}
else{
    [[self navigationController] popViewControllerAnimated:YES];
}

1 个答案:

答案 0 :(得分:3)

你可以通过标签实现一些非常好的东西。将每个标记设置为某个标记1,2,...,20。然后,使用以下内容迭代:

    for (int x = 1; x < 21; x++)
    {
        UITextField *aTextField = (UITextField *) [self.view viewWithTag:x];
        //check here if text
    }

另外,为了提高效率,您可以设置一个从零开始的标志,如果用户编辑textField,它将更改为1。然后它只会循环,如果它是一个。


然而,对于你当前的方法,你可以做的是有一个标志(是的,再一次,我喜欢它们:))并在手前将其设置为零(可能在viewDidLoad中)。如果您遇到包含单词的文本字段,请将其设置为1.删除当前的if(textField.text.length == 0)语句。然后,在循环之后检查标志是否仍然== 0。

相关问题