没有viewController中实现UIAlertController

在最新的iOS的api中,使用了UIAlertController代替了iOS7及其以下的UIAlertView,同时取消了UIAlertView的代理方法。UIAlertController在Controller中使用是十分方便的,但是不尽人意的是,在很多其他情况下,我们需要在其他环境中使用UIAlertController.

  1. 介绍UIAlertView
    UIAlertView中能在iOS7及其以下的系统中使用,UIAlertView官方文档。主要是生成一个alertView,通过实现的它对应的代理方法,来实现不同按钮对应的不同的业务逻辑。具体的方法可以参照Apple的文档,很详细。

  2. 在ViewController中实现UIAlertController
    UIAlertController文档,UIAlertController主要是为了替换UIAlertView和UIActionSheet类,自iOS8之后有效。

(1).创建UIAlertController

+ (instancetype)alertControllerWithTitle:(NSString*)title message:  (NSString*)message preferredStyle:(UIAlertControllerStyle)preferredStyle

其中通过属性UIAlertControllerStyle来区分创建的是UIAlertView类型,还是UIActionSheet类型。

(2).新增UIAlertAction

UIAlertController的对象是通过新增的UIAlertAction对象来进行单击反馈的。所以要创建UIAlertAction对象。

+ (instancetype)actionWithTitle:(NSString*)title style:(UIAlertActionStyle)style    handler:(void (^)(UIAlertAction *action))handler

之后通过

- (void)addAction:(UIAlertAction*)action

方法将Action添加到UIAlertController对象实例中。

备注:

  1. 在action的block中,就是该action触发的处理事件(handler)。
  2. 可以通过配置action的UIAlertActionStyle属性来展示action的样式。

(3).显示UIAlertController

[self presentViewController:alertController animated:YES completion:nil];
  • 没有在 ViewController下实现UIAlertController

首先看一篇文章,就是介绍如何实现在没有ViewController的情况下实现UIAlertController。

因为UIAlertController使用只能使用ViewController的presentViewController:animated:completion的方法才能显示。所有在没有直接的ViewController时候,只能想法子找到一个(viewController)或者创建一个。如下demo

(1).首先继承UIAlertController,定制一个自己的UIAlertController(WPSAlertController)

@interface WPSAlertController :UIAlertController

- (void)show; // 显示,animated = NO

- (void)showAnimated:(BOOL)animated; // 显示 animated = NO or YES

+ (void)presentOkayWithTitle:(NSString*)title message:(NSString*)message;

+ (void)presentOkayAlertWithError:(nullableNSError*)error;

@end

(2)核心方法的实现 - (void)showAnimated:(BOOL)animated

.m文件中的实现如下

@interfaceWPSAlertController()

@property(nonatomic,strong)UIWindow*alertWindow;

@end
@implementation WPSAlertController

......

// 核心方法 - 自行创建一个rootViewController,

- (void)showAnimated:(BOOL)animated {

    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [window setBackgroundColor:[UIColor clearColor]];
    UIViewController*rootViewController = [[UIViewController alloc] init];
    [[rootViewController view] setBackgroundColor:[UIColor clearColor]];
    // set window level
    [window setWindowLevel:UIWindowLevelAlert + 1];
    [window makeKeyAndVisible];
    [self setAlertWindow:window];
    [window setRootViewController:rootViewController];

    [rootViewController presentViewController:self animated:animated completion:nil];
}


+ (void)presentOkayWithTitle:(NSString*)title message:(NSString*)message {

    WPSAlertController*alertController = [WPSAlertController        alertControllerWithTitle:title message:message      preferredStyle:UIAlertControllerStyleAlert];

    //创建UIAlertAction

    UIAlertAction*okayAction = [UIAlertAction actionWithTitle:@"Okay"       style:UIAlertActionStyleDefault handler:^(UIAlertAction*_Nonnull action) {

    // you code for okay action

}];

    [alertController addAction:okayAction];

    UIAlertAction*errorAction = [UIAlertAction actionWithTitle:@"cancle"    style:UIAlertActionStyleCancel handler:^(UIAlertAction*_Nonnull action) {

    // you code for cancle action

}];

    [alertController addAction:errorAction];
    // present the alertController with animated
    [alertControllershowAnimated:YES];

}

@end

最后,只需要在需要的地方直接调用+ (void)presentOkayWithTitle:(NSString)title message:(NSString)message方法即可。(其他个性化的都可以自行实现)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容