IOS SDK详解之UIAlertController(IOS8之后替代AlertView和ActionSheet)

来源:互联网 发布:win7旗舰版重装软件 编辑:程序博客网 时间:2024/05/02 12:30

一 概述

在IOS8之后,UIAlertController替代了UIActionSheet和UIAlertView。把两种类型的提示信息放到这一个类里来实现。
注意, 这个class不能通过继承的方式来自定义

二 类介绍

先举两个使用的例子
例子一
IOS SDK详解之UIAlertController(IOS8之后替代AlertView和ActionSheet)0

UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil message: nil preferredStyle:UIAlertControllerStyleActionAlert];    //添加Button    [alertController addAction: [UIAlertAction actionWithTitle: @"拍照" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) {        //处理点击拍照    }]];    [alertController addAction: [UIAlertAction actionWithTitle: @"从相册选取" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action){        //处理点击从相册选取    }]];    [alertController addAction: [UIAlertAction actionWithTitle: @"取消" style: UIAlertActionStyleCancel handler:nil]];    [self presentViewController: alertController animated: YES completion: nil];

例子二
IOS SDK详解之UIAlertController(IOS8之后替代AlertView和ActionSheet)1
实现代码

    UIAlertController * alertController = [UIAlertController alertControllerWithTitle: @"登陆"                                                                                  message: @"输入用户名密码"                                                                              preferredStyle:UIAlertControllerStyleAlert];    [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {        textField.placeholder = @"name";        textField.textColor = [UIColor blueColor];        textField.clearButtonMode = UITextFieldViewModeWhileEditing;        textField.borderStyle = UITextBorderStyleRoundedRect;    }];    [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {        textField.placeholder = @"password";        textField.textColor = [UIColor blueColor];        textField.clearButtonMode = UITextFieldViewModeWhileEditing;        textField.borderStyle = UITextBorderStyleRoundedRect;        textField.secureTextEntry = YES;    }];    [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {        NSArray * textfields = alertController.textFields;        UITextField * namefield = textfields[0];        UITextField * passwordfiled = textfields[1];        NSLog(@"%@:%@",namefield.text,passwordfiled.text);    }]];    [self presentViewController:alertController animated:YES completion:nil];

三 使用的步骤

第一步 初始化

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

这里的preferredStyle有两种,sheet和alert

typedef enum UIAlertControllerStyle: NSInteger {   UIAlertControllerStyleActionSheet = 0,   UIAlertControllerStyleAlert } UIAlertControllerStyle;

第二步,添加Action(button或者textfield)
添加Button
- (void)addAction:(UIAlertAction *)action
这里的UIAlertAction是一个比较简单的类

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

style有三种

typedef enum UIAlertActionStyle: NSInteger {   UIAlertActionStyleDefault = 0,//默认   UIAlertActionStyleCancel,//取消   UIAlertActionStyleDestructive //有可能改变或者数据} UIAlertActionStyle;

添加TextField
注意,只能是 UIAlertControllerStyleAlert才能添加Textfield

- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler 

在block里配置textfield的信息,例如placeholder,backgroundcolor等。
Textfield的保存信息可由UIAlertController的属性Textfields获得。如同上述的例子二一样。

第三步,显示
例如

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

总结:

总的来说,API把两种Alertview进行统一,并且不用代理的方式来传递消息。而是改成了block。就个人而言,还是比较喜欢Block的方式的。上述的两幅图的背景请忽略,那是我准备写另一篇关于拍照博客的Demo工程。

0 0