iOS8开发之iOS8的UIAlertController

Posted claireyuancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS8开发之iOS8的UIAlertController相关的知识,希望对你有一定的参考价值。

ios8之前用UIActionSheet和UIAlertView来提供button选择和提示性信息,比方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{    
  
}  

假设须要改动button字体、颜色等能够实现下面代理:

- (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,代码显得更加紧凑。






以上是关于iOS8开发之iOS8的UIAlertController的主要内容,如果未能解决你的问题,请参考以下文章

iOS8: 企业开发的终结?

iOS8扩展插件开发配置

iOS 开发之照片框架详解

iOS8开发~Swift入门

iOS8如何设置TabBarItem图片

iOS8通讯录之联系人增删查,多号码增删操作