热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UIAlertController获取文本

如何解决《UIAlertController获取文本》经验,为你挑选了1个好方法。

我试图从UIAlertController文本字段中获取文本.有人可以告诉我,由于它不起作用,我做错了什么.我得到一个NIL回归.

- (IBAction)btnMakeRec {

        UIAlertController *alert= [UIAlertController
                                   alertControllerWithTitle:@"Recipe Name?"
                                   message:@""
                                   preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                   handler:^(UIAlertAction * action){


                                               UITextField *temp = alert.textFields.firstObject;

                                               RecipeDesc.text = temp.text;
                                               // HERE temp is Nil


                                               RDescription = [[NSString alloc ] initWithFormat:@"%@", RecipeDesc.text];


                                                   }];

        UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction * action) {

                                                         //  NSLog(@"cancel btn");

                                                           [alert dismissViewControllerAnimated:YES completion:nil];

                                                       }];

        [alert addAction:ok];
        [alert addAction:cancel];

        [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
            textField.placeholder = @"Enter the name of the recipe";
            textField.keyboardType = UIKeyboardTypeDefault;
        }];

        [self presentViewController:alert animated:YES completion:nil];

    }

}

bauerMusic.. 30

这是'干净的复制/粘贴'版本:

Swift 3&4:

let alert = UIAlertController(title: "Alert Title",
                              message: "Alert message",
                              preferredStyle: UIAlertControllerStyle.alert)

let ok = UIAlertAction(title: "OK",
                       style: UIAlertActionStyle.default) { (action: UIAlertAction) in

                        if let alertTextField = alert.textFields?.first, alertTextField.text != nil {

                            print("And the text is... \(alertTextField.text!)!")

                        }


}

let cancel = UIAlertAction(title: "Cancel",
                           style: UIAlertActionStyle.cancel,
                           handler: nil)

alert.addTextField { (textField: UITextField) in

    textField.placeholder = "Text here"

}

alert.addAction(ok)
alert.addAction(cancel)

self.present(alert, animated: true, completion: nil)

斯威夫特2:

let alert = UIAlertController(title: "Alert Title",
                              message: "Alert message",
                              preferredStyle: UIAlertControllerStyle.Alert)

let ok = UIAlertAction(title: "OK",
                       style: UIAlertActionStyle.Default) { (action: UIAlertAction) in

                        if let alertTextField = alert.textFields?.first where alertTextField.text != nil {

                            print("And the text is... \(alertTextField.text!)!")

                        }


}

let cancel = UIAlertAction(title: "Cancel",
                           style: UIAlertActionStyle.Cancel,
                           handler: nil)

alert.addTextFieldWithConfigurationHandler { (textField: UITextField) in

    textField.placeholder = "Text here"

}

alert.addAction(ok)
alert.addAction(cancel)

self.presentViewController(alert, animated: true, completion: nil)

目标C:

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

UIAlertAction *ok = [UIAlertAction actionWithTitle: @"OK" style: UIAlertActionStyleDefault
                                           handler:^(UIAlertAction *action){


                                               UITextField *alertTextField = alert.textFields.firstObject;

                                               NSLog(@"And the text is... %@!", alertTextField.text);

                                           }];

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel
                                               handler: nil];


[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {

    textField.placeholder = @"Text here";

}];

[alert addAction:ok];
[alert addAction:cancel];

[self presentViewController:alert animated:YES completion:nil];

上一个答案:

编辑: - 请注意:目前,原始问题似乎是按原样运作.

澄清:

UIAlertController调用后实例应该持有它的文本框数组文本字段addTextFieldWithConfigurationHandler.

UIAlertController *alertCOntroller= ...// Create alert

// Assuming you called 'addTextFieldWithConfigurationHandler' on 'alertController'

UIAlertAction *action = [UIAlertAction actionWithTitle: ... handler:^(UIAlertAction * action) {

    // alertController.textFields should hold the alert's text fields.
}

如果由于某种原因它没有,请放弃更多的光(因为这个问题仍然受到关注).似乎(通过一些评论)有些人对此有一些问题,但没有提供超出"它不起作用"的信息.


原始答案:

你的代码看起来很好,它应该工作.

另一种方法是定义一个UITextField之前UIAlertController *alert=...

UITextField *myTf;

addTextFieldWithConfigurationHandler以下位置传递textField :

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
            textField.placeholder = @"Enter the name of the recipe";
            textField.keyboardType = UIKeyboardTypeDefault;

            myTf = textField;
        }];

然后,在:

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                               handler:^(UIAlertAction * action){...
//UITextField *temp = alert.textFields.firstObject;

// Get the text from your textField
NSString *temp = myTf.text;

- 编辑

原始海报的代码现在可以正常工作(在Xcode 7,iOS 9下测试).可能是以前版本中的错误.可能是在以前的版本中,textField由弱引用持有并被释放,除非另一个强指针持有它.



1> bauerMusic..:

这是'干净的复制/粘贴'版本:

Swift 3&4:

let alert = UIAlertController(title: "Alert Title",
                              message: "Alert message",
                              preferredStyle: UIAlertControllerStyle.alert)

let ok = UIAlertAction(title: "OK",
                       style: UIAlertActionStyle.default) { (action: UIAlertAction) in

                        if let alertTextField = alert.textFields?.first, alertTextField.text != nil {

                            print("And the text is... \(alertTextField.text!)!")

                        }


}

let cancel = UIAlertAction(title: "Cancel",
                           style: UIAlertActionStyle.cancel,
                           handler: nil)

alert.addTextField { (textField: UITextField) in

    textField.placeholder = "Text here"

}

alert.addAction(ok)
alert.addAction(cancel)

self.present(alert, animated: true, completion: nil)

斯威夫特2:

let alert = UIAlertController(title: "Alert Title",
                              message: "Alert message",
                              preferredStyle: UIAlertControllerStyle.Alert)

let ok = UIAlertAction(title: "OK",
                       style: UIAlertActionStyle.Default) { (action: UIAlertAction) in

                        if let alertTextField = alert.textFields?.first where alertTextField.text != nil {

                            print("And the text is... \(alertTextField.text!)!")

                        }


}

let cancel = UIAlertAction(title: "Cancel",
                           style: UIAlertActionStyle.Cancel,
                           handler: nil)

alert.addTextFieldWithConfigurationHandler { (textField: UITextField) in

    textField.placeholder = "Text here"

}

alert.addAction(ok)
alert.addAction(cancel)

self.presentViewController(alert, animated: true, completion: nil)

目标C:

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

UIAlertAction *ok = [UIAlertAction actionWithTitle: @"OK" style: UIAlertActionStyleDefault
                                           handler:^(UIAlertAction *action){


                                               UITextField *alertTextField = alert.textFields.firstObject;

                                               NSLog(@"And the text is... %@!", alertTextField.text);

                                           }];

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel
                                               handler: nil];


[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {

    textField.placeholder = @"Text here";

}];

[alert addAction:ok];
[alert addAction:cancel];

[self presentViewController:alert animated:YES completion:nil];

上一个答案:

编辑: - 请注意:目前,原始问题似乎是按原样运作.

澄清:

UIAlertController调用后实例应该持有它的文本框数组文本字段addTextFieldWithConfigurationHandler.

UIAlertController *alertCOntroller= ...// Create alert

// Assuming you called 'addTextFieldWithConfigurationHandler' on 'alertController'

UIAlertAction *action = [UIAlertAction actionWithTitle: ... handler:^(UIAlertAction * action) {

    // alertController.textFields should hold the alert's text fields.
}

如果由于某种原因它没有,请放弃更多的光(因为这个问题仍然受到关注).似乎(通过一些评论)有些人对此有一些问题,但没有提供超出"它不起作用"的信息.


原始答案:

你的代码看起来很好,它应该工作.

另一种方法是定义一个UITextField之前UIAlertController *alert=...

UITextField *myTf;

addTextFieldWithConfigurationHandler以下位置传递textField :

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
            textField.placeholder = @"Enter the name of the recipe";
            textField.keyboardType = UIKeyboardTypeDefault;

            myTf = textField;
        }];

然后,在:

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                               handler:^(UIAlertAction * action){...
//UITextField *temp = alert.textFields.firstObject;

// Get the text from your textField
NSString *temp = myTf.text;

- 编辑

原始海报的代码现在可以正常工作(在Xcode 7,iOS 9下测试).可能是以前版本中的错误.可能是在以前的版本中,textField由弱引用持有并被释放,除非另一个强指针持有它.


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
author-avatar
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有