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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

我正在将所有内容从AlertView更改为AlertController,但在Objectc中找不到任何检索用户在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中定义的,所以我不能在代码之外访问它。但是如果我试图预定义它,我会得到一个错误消息。

提问于
用户回答回答于

在我的例子中,我在脚本的各个点重复使用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);


}
用户回答回答于

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;
                                         }];

扫码关注云+社区