如何使用目标c从UIAlertController中的文本字段访问输入?

时间:2014-11-05 22:18:41

标签: input ios8 uialertcontroller

我将所有内容从AlertView更改为AlertController,但我无法在线查找任何用于检索用户在AlertController的文本字段中输入内容的内容。这就是我所拥有的:

if ([UIAlertController class]) {
            UIAlertController *alertControllerK2 = [UIAlertController
                                                    alertControllerWithTitle:@"\u00A0"
                                                    message:@"Please enter the first number."
                                                    preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *K2okAction = [UIAlertAction
                                         actionWithTitle:@"OK"
                                         style:UIAlertActionStyleDefault
                                         handler:nil];
            [alertControllerK2 addTextFieldWithConfigurationHandler:^(UITextField *K2TextField)
             {
                 K2TextField.placeholder = NSLocalizedString(@"Please enter the first number.", @"Please enter the first number.");
             }];
            [alertControllerK2 addAction:K2okAction];
            [self presentViewController:alertControllerK2 animated:YES completion:nil];
        } else {
            UIAlertView *alertK2;
            alertK2 = [[UIAlertView alloc]
                       initWithTitle:@"\u00A0"
                       message:@"Please enter the first number."
                       delegate: self
                       cancelButtonTitle:@"OK"
                       otherButtonTitles:nil];
            alertK2.alertViewStyle=UIAlertViewStylePlainTextInput;
            [alertK2 show];
        }

问题是K2TextField是在UIAlertController中定义的,所以我无法在该代码之外访问它。但是,如果我尝试预定义它,我会收到一条错误消息。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:32)

UIAlertController有一个textFields数组,在您添加它们时排序(您添加的第一个是索引0)。由于它是通用数组,因此您必须在访问text字段之前强制转换结果。

__weak UIAlertController *alertRef = alertController;
UIAlertAction* okAction = [UIAlertAction actionWithTitle:@"Button Text"
                                         handler:^(UIAlertAction * action) {
                                             // access text from text field
                                             NSString *text = ((UITextField *)[alertRef.textFields objectAtIndex:0]).text;
                                         }];

答案 1 :(得分:4)

在我的情况下,我在脚本中的各个点重新使用AlertController,因此在我的标题.h文件中,我将其设为全局:

 UIAlertController *alertController;

然后在我的实现.m文件中,我将其分配给当前警报,如下所示:

 alertController = (UIAlertController *)self.presentedViewController;

上面检索现有警报并将其分配给全局。为此,您首先需要初始化它或创建一个新的:

 UIAlertController* anyALERTname = [UIAlertController alertControllerWithTitle:@"Alert Title" message:yourAlertMessage preferredStyle:UIAlertControllerStyleAlert];

现在你有了当前的AlertController,你可以伸手去拿(并抓住)TextField:

 if (alertController) {

    //go and get the action field

    UITextField *alertText1 = alertController.textFields.firstObject;

    NSLog(@"what is alert text? %@",alertText1.text);


}