Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查UITextFields中的文本_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios 检查UITextFields中的文本

Ios 检查UITextFields中的文本,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我的应用程序上有一个视图控制器,用户可以在其中输入个人信息。有一个“取消”选项,它会弹出一个警报,通知他们如果不保存数据,他们将丢失数据。我只想在该视图控制器中的任何文本字段具有[.text.length>0]时显示此警报(我有大约20个文本字段,如果任何文本字段甚至具有1个字符,则应调出警报)。我可以手动命名if语句中的每个文本字段,但希望有某种方法可以检查我的视图控制器中的所有文本字段 以下是我目前掌握的情况: for (UIView *view in [self.view subviews

我的应用程序上有一个视图控制器,用户可以在其中输入个人信息。有一个“取消”选项,它会弹出一个警报,通知他们如果不保存数据,他们将丢失数据。我只想在该视图控制器中的任何文本字段具有[.text.length>0]时显示此警报(我有大约20个文本字段,如果任何文本字段甚至具有1个字符,则应调出警报)。我可以手动命名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、2、,20然后,通过如下方式进行迭代:

    for (int x = 1; x < 21; x++)
    {
        UITextField *aTextField = (UITextField *) [self.view viewWithTag:x];
        //check here if text
    }
for(int x=1;x<21;x++)
{
UITextField*aTextField=(UITextField*)[self.view视图带标记:x];
//如果有文本,请检查此处
}
此外,为了提高效率,您可以设置一个以零开始的标志,如果用户编辑文本字段,它将更改为一。那么它将只循环一次



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

我想保留我目前拥有的解决方案,我只想确保它正常工作。更新了上面的代码。使用您的方法添加了解决方案。