用block将UIAlertView与UIActionSheet统一起来
效果
1. 将代理方法的实例对象方法转换成了类方法使用
2. 要注意单例block不要长期持有,用完就释放掉
源码
https://github.com/YouXianMing/UIInfomationView
// // UIInfomationView.h // Alert // // Created by YouXianMing on 15/6/23. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> typedef void (^ClickAtIndexBlock)(NSInteger buttonIndex); @interface UIInfomationView : NSObject /** * 弹出AlertView对话框 * * @param title 标题 * @param message 信息 * @param cancelButtonTitle 取消按钮 * @param otherButtons 其他按钮 * @param clickAtIndex 获取点击信息的block(进入block中的对象请用weak修饰,否则会导致被block持有) * * @return AlertView对象 */ + (UIAlertView *)showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtons clickAtIndex:(ClickAtIndexBlock)clickAtIndex; /** * 弹出ActionSheet对话框 * * @param view 要显示的view * @param title 标题 * @param cancelButtonTitle 取消按钮 * @param destructiveButton destructive按钮 * @param otherButtons 其他按钮 * @param clickAtIndex 获取点击信息的block(进入block中的对象请用weak修饰,否则会导致被block持有) * * @return ActionSheet对象 */ + (UIActionSheet *)showActionSheetInView:(UIView *)view WithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButton otherButtonTitles:(NSArray *)otherButtons clickAtIndex:(ClickAtIndexBlock)clickAtIndex; @end
// // UIInfomationView.m // Alert // // Created by YouXianMing on 15/6/23. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "UIInfomationView.h" #import <UIKit/UIKit.h> /** * 让类方法中的对象被持有 */ static ClickAtIndexBlock _clickAtIndexBlock; @interface UIInfomationView () <UIActionSheetDelegate, UIAlertViewDelegate> @end @implementation UIInfomationView + (UIAlertView *)showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtons clickAtIndex:(ClickAtIndexBlock)clickAtIndex { _clickAtIndexBlock = [clickAtIndex copy]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil]; for(NSString *buttonTitle in otherButtons) { [alert addButtonWithTitle:buttonTitle]; } [alert show]; return alert; } + (UIActionSheet *)showActionSheetInView:(UIView *)view WithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButton otherButtonTitles:(NSArray *)otherButtons clickAtIndex:(ClickAtIndexBlock)clickAtIndex { _clickAtIndexBlock = [clickAtIndex copy]; UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:title delegate:[self self] cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:destructiveButton otherButtonTitles:nil]; for(NSString *buttonTitle in otherButtons) { [sheet addButtonWithTitle:buttonTitle]; } [sheet showInView:view]; return sheet; } #pragma mark - alertView代理 + (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { _clickAtIndexBlock(buttonIndex); } + (void)alertView:(UIAlertView*)alertView didDismissWithButtonIndex:(NSInteger) buttonIndex { _clickAtIndexBlock = nil; } #pragma mark - actionSheetView代理 + (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { _clickAtIndexBlock(buttonIndex); } + (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { _clickAtIndexBlock = nil; } @end
注意