用block将UIAlertView与UIActionSheet统一起来
2015-06-23 21:45
543 查看
用block将UIAlertView与UIActionSheet统一起来
效果
1. 将代理方法的实例对象方法转换成了类方法使用
2. 要注意单例block不要长期持有,用完就释放掉
源码
https://github.com/YouXianMing/UIInfomationView
注意
效果
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
注意
相关文章推荐
- UIStepper
- 程序员们有福了:独立于GUI的Java应用框架 Reflex 诞生了!
- leetcode-52-N-Queens II
- UIEdgeInsetsMake 和 UIEdgeInsetsMake
- QuerySyntaxException
- 合并流SequenceInputStream
- 黑马程序员--NSArray,NSString,NSSet,NSDictionary,NSNumber,NSValue 及其可变(NSMutable..)
- 解决 An AnnotationConfiguration instance is required to use
- UITableViewCell里面separator的设置
- C#.NET Request相关操作
- UIScrollView
- 关于iOS中UITableView下拉距离短刷新没事,下拉距离长就会崩溃的问题解决方案
- Uip + Stm32移植问题总结(转)
- 基于IBM Bluemix开发微信公共账号应用
- 如何让应用支持quicksearchbox全局搜索
- UIScreenEdgePanGestureRecognizer 边缘触发手势 MVC模式下实现
- 听同事讲 Bayesian statistics: Part 1 - Bayesian vs. Frequentist
- 在mini2440上移植Bluetooth
- Quick Reference:php5 Xdebug 代码覆盖分析
- XCUIElement API