【问题标题】:How do I access the input from my text field in UIAlertController with objective c?如何使用目标 c 从 UIAlertController 中的文本字段访问输入?
【发布时间】:2014-11-05 22:18:41
【问题描述】:

我正在将所有内容从 AlertView 更改为 AlertController,但我无法在网上找到任何用于检索用户在 AlertController 的文本字段中输入的内容的目标 c。这是我所拥有的:

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

【问题讨论】:

    标签: input ios8 uialertcontroller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 2015-03-16
        • 2013-03-14
        • 1970-01-01
        相关资源
        最近更新 更多