FFGlobalAlertController 1.0.2

FFGlobalAlertController 1.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年9月

Eric Larson 维护。



背景

我们有一个现有的应用,我们已经将所有的 UIAlertView 替换成了 iOS 8 中的新的 UIAlertController。关键差异在于你必须指定一个 UIViewController 来展示。当你的数据模型或网络代码或某些其他单例需要显示警告时,这会带来问题,因为它们通常不清楚当前的 UIViewController。我们的第一个解决方案是从应用程序委托中获取 rootViewController,然后从那里开始。但这里有很多边缘情况,这根本不起作用。

我利用 2015 年的 WWDC 机会询问一位苹果工程师这种情况下的最佳实践,他推荐在空的透明 ViewController 中显示 UIAlertController。我不想子类化它,因为这样我就必须改变所有代码以使用子类。因此,我在 UIAlertController 上创建了此类别。

用法

要运行示例项目,请克隆存储库,然后首先从示例目录中运行 pod install

要显示基本 UIAlertController

    #import "UIAlertController+Window.h"

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Global Alert" message:@"The message" preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
    [alert show];

要显示带有文本字段的 UIAlertController,您必须在操作处理程序中使用局部变量引用 UITextField,而不是通过警告来引用。否则,将创建一个保留周期,UIWindow 将不会 dealloc 并留在屏幕上,阻止触摸。

    __block UITextField *localTextField;
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Global Alert" message:@"Enter some text" preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        NSLog(@"do something with text:%@", localTextField.text);
    }]];
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        localTextField = textField;
    }];
    [alert show];

要求

显然是 iOS 8,因为这是为在 iOS 8 中引入的 UIAlertController。

安装

FFGlobalAlertController 可以通过 CocoaPods 获得。要安装它,只需将以下行添加到 Podfile 中

pod "FFGlobalAlertController"
#import "UIAlertController+Window.h"

作者

Eric Larson,

许可证

FFGlobalAlertController 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。