具体代码附文末。先演示一下怎么使用。
AlertView的情况
- (void)creatAlertView { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [alertView show]; } #pragma mark UIAlertViewDelegate - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0: break; case 1: break; default: break; } } #pragma mark Use NewObject(AlertView) - (void)creatAlertView { BOAlertController *alertView = [[BOAlertController alloc] initWithTitle:@"title" message:@"message" viewController:self]; RIButtonItem *cancelItem = [RIButtonItem itemWithLabel:@"取消" action:^{ }]; [alertView addButton:cancelItem type:RIButtonItemType_Cancel]; RIButtonItem *okItem = [RIButtonItem itemWithLabel:@"确定" action:^{ }]; [alertView addButton:okItem type:RIButtonItemType_Destructive]; [alertView show]; }
ActionSheet的情况
- (void)creatActionSheet { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"title" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:@"其它功能", nil]; [actionSheet showInView:self.view]; } #pragma mark UIActionSheetDelegate - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0: break; case 1: break; default: break; } } #pragma mark Use NewObject(ActionSheet) - (void)creatActionSheet { BOAlertController *actionSheet = [[BOAlertController alloc] initWithTitle:@"title" message:nil viewController:self]; RIButtonItem *cancelItem = [RIButtonItem itemWithLabel:@"取消" action:^{ }]; [actionSheet addButton:cancelItem type:RIButtonItemType_Cancel]; RIButtonItem *okItem = [RIButtonItem itemWithLabel:@"确定" action:^{ }]; [actionSheet addButton:okItem type:RIButtonItemType_Destructive]; [actionSheet showInView:self.view]; }
使用这个封装类需要扩展类UIAlertView-Blocks的支持。下载地址https://github.com/jivadevoe/UIAlertView-Blocks
封装类代码
// Created by 孙俊 on 14-9-25. // Copyright (c) 2014年 yipinapp.ibrand. All rights reserved. // typedef enum { RIButtonItemType_Cancel = 1, RIButtonItemType_Destructive , RIButtonItemType_Other }RIButtonItemType; typedef enum { BOAlertControllerType_AlertView = 1, BOAlertControllerType_ActionSheet }BOAlertControllerType; #define isIOS8 ([[[UIDevice currentDevice]systemVersion]floatValue]>=8) #import <Foundation/Foundation.h> #import "RIButtonItem.h" @interface BOAlertController : NSObject - (id)initWithTitle:(NSString *)title message:(NSString *)message viewController:(UIViewController *)inViewController; - (void)addButton:(RIButtonItem *)button type:(RIButtonItemType)itemType; //Show ActionSheet in all versions - (void)showInView:(UIView *)view; //Show AlertView in all versions - (void)show; @end #import "BOAlertController.h" #import "UIActionSheet+Blocks.h" #import "UIAlertView+Blocks.h" @interface BOAlertController() @property (nonatomic, strong) NSString *title; @property (nonatomic, strong) NSString *message; @property (nonatomic, weak) UIViewController *inViewController; @property (nonatomic, strong) NSMutableDictionary *buttonInfoDict; @end @implementation BOAlertController - (id)initWithTitle:(NSString *)title message:(NSString *)message viewController:(UIViewController *)inViewController { if (self = [super init]) { self.title = title; self.message = message; self.inViewController = inViewController; } return self; } - (NSMutableDictionary *)buttonInfoDict { if (_buttonInfoDict == nil) { _buttonInfoDict = [NSMutableDictionary dictionary]; } return _buttonInfoDict; } - (void)addButton:(RIButtonItem *)button type:(RIButtonItemType)itemType { if (button == nil || ![button isKindOfClass:[RIButtonItem class]]) { return; } switch (itemType) { case RIButtonItemType_Cancel: { [self.buttonInfoDict setObject:button forKey:@"RIButtonItemType_Cancel"]; } break; case RIButtonItemType_Destructive: { [self.buttonInfoDict setObject:button forKey:@"RIButtonItemType_Destructive"]; } break; case RIButtonItemType_Other: { NSMutableArray *otherArray = self.buttonInfoDict[@"RIButtonItemType_Other"]; if (otherArray == nil) { otherArray = [NSMutableArray array]; } [otherArray addObject:button]; [self.buttonInfoDict setObject:otherArray forKey:@"RIButtonItemType_Other"]; } break; default: break; } } - (void)showInView:(UIView *)view { if (isIOS8) { [self showIOS8ViewWithType:BOAlertControllerType_ActionSheet]; } else { [self ios7showInView:view]; } } - (void)show { if (isIOS8) { [self showIOS8ViewWithType:BOAlertControllerType_AlertView]; } else { [self ios7Show]; } } - (void)showIOS8ViewWithType:(BOAlertControllerType)viewType { if (self.inViewController == nil) { return; } UIAlertController *alertController = nil; switch (viewType) { case BOAlertControllerType_AlertView: { alertController = [UIAlertController alertControllerWithTitle:self.title message:self.message preferredStyle:UIAlertControllerStyleAlert]; } break; case BOAlertControllerType_ActionSheet: { alertController = [UIAlertController alertControllerWithTitle:self.title message:self.message preferredStyle:UIAlertControllerStyleActionSheet]; } break; default: break; } RIButtonItem *cancelItem = self.buttonInfoDict[@"RIButtonItemType_Cancel"]; if (cancelItem != nil) { UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelItem.label style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { cancelItem.action(); }]; [alertController addAction:cancelAction]; } RIButtonItem *destructiveItem = self.buttonInfoDict[@"RIButtonItemType_Destructive"]; if (destructiveItem != nil) { UIAlertAction *destructiveAction = [UIAlertAction actionWithTitle:destructiveItem.label style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { destructiveItem.action(); }]; [alertController addAction:destructiveAction]; } NSArray *otherItems = self.buttonInfoDict[@"RIButtonItemType_Other"]; if (otherItems != nil && otherItems.count > 0) { for (RIButtonItem *buttonItem in otherItems) { UIAlertAction *otherAction = [UIAlertAction actionWithTitle:buttonItem.label style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { buttonItem.action(); }]; [alertController addAction:otherAction]; } } [self.inViewController presentViewController:alertController animated:YES completion:nil]; } - (void)ios7showInView:(UIView *)view { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:self.title cancelButtonItem:self.buttonInfoDict[@"RIButtonItemType_Cancel"] destructiveButtonItem:self.buttonInfoDict[@"RIButtonItemType_Destructive"] otherButtonItems: nil]; NSArray *otherItems = self.buttonInfoDict[@"RIButtonItemType_Other"]; if (otherItems != nil && otherItems.count > 0) { for (RIButtonItem *buttonItem in otherItems) { [actionSheet addButtonItem:buttonItem]; } } [actionSheet showInView:view]; } - (void)ios7Show { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:self.title message:self.message cancelButtonItem:self.buttonInfoDict[@"RIButtonItemType_Cancel"] otherButtonItems:nil]; RIButtonItem *destructiveItem = self.buttonInfoDict[@"RIButtonItemType_Destructive"]; if (destructiveItem != nil) { [alertView addButtonItem:destructiveItem]; } NSArray *otherItems = self.buttonInfoDict[@"RIButtonItemType_Other"]; if (otherItems != nil && otherItems.count > 0) { for (RIButtonItem *buttonItem in otherItems) { [alertView addButtonItem:buttonItem]; } } [alertView show]; } @end