• iOS8开发之iOS8的UIAlertController


    在iOS8之前用UIActionSheet和UIAlertView来提供按钮选择和提示性信息,比如UIActionSheet可以这样写:

     UIActionSheet *actionSheet = [[UIActionSheet alloc]  
                                      initWithTitle:@"title,nil时不显示"  
                                      delegate:self  
                                      cancelButtonTitle:@"取消"  
                                      destructiveButtonTitle:@"确定"  
                                      otherButtonTitles:@"第一项", @"第二项",nil];  
        actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;  
        [actionSheet showInView:self.view];

    然后在协议中实现代理:
    (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex  
    {  
        if (buttonIndex == 0) {  
            NSLog(@"确定");  
        }else if (buttonIndex == 1) {  
            NSLog(@"第一项");  
        }else if(buttonIndex == 2) {  
            NSLog(@"第二项");  
        }else if(buttonIndex == actionSheet.cancleButtonIndex) {  
            NSLog(@"取消");  
        }   
      
    }  
    - (void)actionSheetCancel:(UIActionSheet *)actionSheet{    
      
    }    
    -(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{    
      
    }    
    -(void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex{    
      
    }  

    如果需要修改按钮字体、颜色等可以实现以下代理:
    - (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
        for (UIView *subViwe in actionSheet.subviews) {
            if ([subViwe isKindOfClass:[UILabel class]]) {
                UILabel *label = (UILabel *)subViwe;
                label.font = [UIFont systemFontOfSize:16];
                label.frame = CGRectMake(CGRectGetMinX(label.frame), CGRectGetMinY(label.frame), CGRectGetWidth(label.frame), CGRectGetHeight(label.frame)+20);
            }
            if ([subViwe isKindOfClass:[UIButton class]]) {
                UIButton *button = (UIButton*)subViwe;
                if ([button.titleLabel.text isEqualToString:@"确定"]) {
                    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
                } else {
                    [button setTitleColor:[WTDevice getGreenColor] forState:UIControlStateNormal];
                }
                button.titleLabel.font = [UIFont systemFontOfSize:18];
            }
        }
    }

    以上代码(代理部分),在ios7及以下版本中是有效的,但是在iOS8中却不起作用,因为iOS8抛弃了UIActionSheet和UIAlertView,取而代之的是UIAlertController,其使用方法如下(代替UIAlertView):
    #ifdef __IPHONE_8_0
            if (TARGET_IS_IOS8) {
                UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:@"提示"
                                                                                               message:@"需要设置允许访问相机,操作方法见“设置”->“帮助中心”"
                                                                                        preferredStyle:UIAlertControllerStyleAlert];
                UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"确定"
                                                                       style:UIAlertActionStyleDestructive
                                                                     handler:^(UIAlertAction * action) {}];
                
                [actionSheetController addAction:actionCancel];
                [actionSheetController.view setTintColor:[WTDevice getGreenColor]];
                [self presentViewController:actionSheetController animated:YES completion:nil];
            }
    #endif
            if (TARGET_NOT_IOS8) {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"需要设置允许访问相机,操作方法见“设置”->“帮助中心”" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil];
                [alert show];
            }

    代替UIActionSheet:
    #ifdef __IPHONE_8_0
        if (TARGET_IS_IOS8) {
            UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:@"action选项"
                                                                                           message:nil
                                                                                    preferredStyle:UIAlertControllerStyleActionSheet];
            UIAlertAction *action0 = [UIAlertAction actionWithTitle:@"选项一"
                                                             style:UIAlertActionStyleDefault
                                                           handler:^(UIAlertAction * action) {
                                                               [self customMethod1];
                                                           }];
            [actionSheetController addAction:action0];
            
            UIAlertAction *action = [UIAlertAction actionWithTitle:@"选项二"
                                                             style:UIAlertActionStyleDefault
                                                           handler:^(UIAlertAction * action) {
                                                               [self <span style="font-family: Arial, Helvetica, sans-serif;">customMethod2</span>];
                                                           }];
            UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"选项三"
                                                              style:UIAlertActionStyleDefault
                                                            handler:^(UIAlertAction * action) {
                                                                [self customMethod3];
                                                            }];
            UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"取消"
                                                                   style:UIAlertActionStyleCancel
                                                                 handler:^(UIAlertAction * action) {}];
            
            [actionSheetController addAction:action];
            [actionSheetController addAction:action1];
            [actionSheetController addAction:actionCancel];
            [actionSheetController.view setTintColor:[UIColor greenColor]];
            [self presentViewController:actionSheetController animated:YES completion:nil];
        }
    #endif
        if (TARGET_NOT_IOS8) {
            UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"action选项" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"选项一",@"选项二",@"选项三", nil];
            [as showInView:self.view];
        }

    至于两者的区别,可以看到,iOS8之前是在controller的view上边又覆盖了一层view,iOS8之后则是present了一个controller并且将代理换成了block,代码显得更加紧凑。
     

    相关文章

  • 相关阅读:
    MySQL mysqlbinlog 读取mysql-bin文件出错
    MySQL slow_log表不能修改成innodb引擎
    Linux 进程一直占用单核CPU分析
    Linux 磁盘告警分析
    Linux 查看文件被那个进程写数据
    springboot项目访问jsp404
    springboot项目启动控制台显示端口被占用解决方法
    js密码强弱正则校验、邮箱校验
    Java Base64加密解密例子
    mysql按日期做曲线图统计,如果当天没有数据则日期不全、补全日期
  • 原文地址:https://www.cnblogs.com/hanweifeng/p/5078475.html
Copyright © 2020-2023  润新知