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的主要内容,如果未能解决你的问题,请参考以下文章