UIAlertController


苹果希望通过一个storyboard搞定适配所有屏幕的显示 将所有屏幕尺寸都抽象成正方形 


打开 ViewController.m

加入方法

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    // 危险操作:弹框提醒
    // 1.UIAlertView
    // 2.UIActionSheet
    // iOS8开始:UIAlertController == UIAlertView + UIActionSheet
    
    [self alertView];
    
}


- (void)alertView
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"电量不足,请尽快充电" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
    [alert show];
}


运行  


     点击屏幕  
     
     修改类型值  alert.alertViewStyle 
     
总之alertView总共就是以下
     
typedef NS_ENUM(NSInteger, UIAlertViewStyle) {
    UIAlertViewStyleDefault = 0,
    UIAlertViewStyleSecureTextInput,
    UIAlertViewStylePlainTextInput,
    UIAlertViewStyleLoginAndPasswordInput
};


4种样式




在类中加入方法


- (void)actionSheet
{
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"警告:电量不足,请尽快充电" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定"
                                              otherButtonTitles:@"关闭", nil];
    [sheet showInView:self.view];
}




将  touchesBegan 方法中的


  [self alertView]; 注释掉在其下加入
  
  [self actionSheet];
  
运行



iOS8中,UIActiconSheet已被废弃,同时基于UIActionSheet自定义的也将无效果。
Apple将UIActionSheet和UIAlertView整合成一个接口UIAlertController。

原来的是一个view,展示在window视图之上。现在改成了controller,展示方式变成由当前的controller直接present出来。
而不再使用原先的显示方式如 [alert show] [sheet showInView:self.view] 
进入 UIAlertController 源代码查看知道该类也是继承 UIViewController
表示悬浮在屏幕中间或某一块位置的控制器  即UIAlertController是UIAlertView + UIActionSheet结合体




将  touchesBegan 方法中的


  [self actionSheet]; 注释掉在其下加入
  
  UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告" message:@"电量不足,请尽快充电" preferredStyle:UIAlertControllerStyleAlert];
  [self presentViewController:alert animated:YES completion:nil];
  




运行


  发现没有按钮


  修改 UIAlertControllerStyleAlert  样式为 UIAlertControllerStyleActionSheet
  
  
运行


  在修改回 UIAlertControllerStyleAlert  样式


通过addAction接口添加具体按钮,设置按钮title、style和使用block方式直接加入按钮响应接口。


style有以下几种:

typedef NS_ENUM(NSInteger, UIAlertActionStyle) {
UIAlertActionStyleDefault = 0,
UIAlertActionStyleCancel,
UIAlertActionStyleDestructive
} NS_ENUM_AVAILABLE_IOS(8_0);








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


顶上加入

    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
        NSLog(@"点击了确定按钮");
    }]];
    [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        NSLog(@"点击了取消按钮");
    }]];
    [alert addAction:[UIAlertAction actionWithTitle:@"其它" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            NSLog(@"点击了其它按钮");
    }]];
    
运行





[alert addAction:[UIAlertAction actionWithTitle:@"其它" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            NSLog(@"点击了其它按钮");
    }]];
    
注释掉在其下加入

    // 添加文本框
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        textField.textColor = [UIColor redColor];
        textField.text = @"123";
    }];
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        textField.secureTextEntry = YES;
        textField.text = @"123";
    }];




运行

   注意:  UIAlertControllerStyleActionSheet 样式不能添加文本框
// Text fields can only be added to an alert controller of style UIAlertControllerStyleAlert
// 只能在UIAlertControllerStyleAlert样式的view上添加文本框
    


 [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
        NSLog(@"点击了确定按钮");
    }]];
    
改为

    __weak typeof(alert) weakAlert = alert;//防止循环引用
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
        NSLog(@"点击了确定按钮--%@-%@", [weakAlert.textFields.firstObject text], [weakAlert.textFields.lastObject text]);
    }]];

运行




监听文本内容改变


    // 添加文本框
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
    textField.textColor = [UIColor redColor];
    textField.text = @"123";
        
下面加入

  [textField addTarget:self action:@selector(usernameDidChange:) forControlEvents:UIControlEventEditingChanged];
  
在类中加入方法  

- (void)usernameDidChange:(UITextField *)username
{
    NSLog(@"%@", username.text);
}


运行




与原来的UIActionSheet和UIAlertView比较:

1、视觉上没有改变,跟之前的样式保持一致;

2、改为controller方式后,控件的生命周期能够更好的控制;方便的弹出和收起

3、当前controller弹出UIAlertController后,再次present controller必须在UIAlertController的基础上present。present后,UIAlertController会被盖住。而之前的UIActionSheet和UIAlertView由于是add在window上面的,当在弹出他们的controller基础上再present controller的话,UIActionSheet和UIAlertView弹框仍然保留在最上方。

4、修改为controller方式后,接口更加简单,而且按钮响应方式更加明了简介,不需要在设置delegate和实现响应的回调等。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值