UIActionSheet+Blocks
2013-11-10 14:22
225 查看
UIActionSheet+Blocks.h
73 UIActionSheet+Blocks.m
@@ -0,0 +1,57 @@ | ||
+// | ||
+// UIActionSheet+Blocks.h | ||
+// | ||
+// Created by Shai Mishali on 9/26/13. | ||
+// Copyright (c) 2013 Shai Mishali. All rights reserved. | ||
+// | ||
+ | ||
+#import <UIKit/UIKit.h> | ||
+ | ||
+/** | ||
+UIActionSheet+Blocks is a simple Block implementation for UIActionSheet created by Shai Mishali. | ||
+*/ | ||
+ | ||
+@interface UIActionSheet (Blocks) <UIActionSheetDelegate> | ||
+ | ||
+/** | ||
+Present a UIActionSheet on a specific view | ||
+ | ||
+Note: On this shorthand version the cancel button always displayed "Cancel" as the text. If you require a custom cancel text, use the longer method below. | ||
+ | ||
+@param view The view on which the UIActionSheet will be displayed | ||
+@param title The title of the UIActionSheet | ||
+@param otherStrings An array containing strings of other buttons | ||
+@param onCancel Cancel block - Called when the user pressed the cancel button, or the UIActionSheet has been manually dismissed | ||
+@param onClickedButton Clicked button at index block - Called when the user presses any button other then Cancel | ||
+ | ||
+@return The generated UIActionSheet | ||
+*/ | ||
++(UIActionSheet *)presentOnView: (UIView *)view | ||
+ withTitle: (NSString *)title | ||
+ otherButtons: (NSArray *)otherStrings | ||
+ onCancel: (void (^)(UIActionSheet *))cancelBlock | ||
+ onClickedButton: (void (^)(UIActionSheet *, NSUInteger))clickBlock; | ||
+ | ||
+/** | ||
+Present a UIActionSheet on a specific view | ||
+ | ||
+@param view The view on which the UIActionSheet will be displayed | ||
+@param title The title of the UIActionSheet | ||
+@param cancelString The string shown on the Cancel button | ||
+@param destructiveString The string shown on the Destructive button | ||
+@param otherStrings An array containing strings of other buttons | ||
+@param onCancel Cancel block - Called when the user pressed the cancel button, or the UIActionSheet has been manually dismissed | ||
+@param onDestructive Destructive block - Called when the user presses the destructive button | ||
+@param onClickedButton Clicked button at index block - Called when the user presses any button other then Cancel/Destructive | ||
+ | ||
+@return The generated UIActionSheet | ||
+*/ | ||
++(UIActionSheet *)presentOnView: (UIView *)view | ||
+ withTitle: (NSString *)title | ||
+ cancelButton: (NSString *)cancelString | ||
+ destructiveButton: (NSString *)destructiveString | ||
+ otherButtons: (NSArray *)otherStrings | ||
+ onCancel: (void (^)(UIActionSheet *))cancelBlock | ||
+ onDestructive: (void (^)(UIActionSheet *))destroyBlock | ||
+ onClickedButton: (void (^)(UIActionSheet *, NSUInteger))clickBlock; | ||
+@end |
@@ -0,0 +1,73 @@ | ||
+// | ||
+// UIActionSheet+Blocks.m | ||
+// | ||
+// Created by Shai Mishali on 9/26/13. | ||
+// Copyright (c) 2013 Shai Mishali. All rights reserved. | ||
+// | ||
+ | ||
+#import "UIActionSheet+Blocks.h" | ||
+ | ||
+static void (^__clickedBlock)(UIActionSheet *sheet, NSUInteger index); | ||
+static void (^__cancelBlock)(UIActionSheet *sheet); | ||
+static void (^__destroyBlock)(UIActionSheet *sheet); | ||
+ | ||
+@implementation UIActionSheet (Blocks) | ||
+ | ||
++(UIActionSheet *)presentOnView:(UIView *)view | ||
+ withTitle:(NSString *)title | ||
+ otherButtons:(NSArray *)otherStrings | ||
+ onCancel:(void (^)(UIActionSheet *))cancelBlock | ||
+ onClickedButton:(void (^)(UIActionSheet *, NSUInteger))clickBlock{ | ||
+ | ||
+return [self presentOnView:view | ||
+withTitle:title | ||
+ cancelButton:NSLocalizedString(@"Cancel", @"") | ||
+destructiveButton:nil | ||
+ otherButtons:otherStrings | ||
+ onCancel:cancelBlock | ||
+onDestructive:nil | ||
+ onClickedButton:clickBlock]; | ||
+} | ||
+ | ||
++(UIActionSheet *)presentOnView: (UIView *)view | ||
+ withTitle: (NSString *)title | ||
+ cancelButton: (NSString *)cancelString | ||
+ destructiveButton: (NSString *)destructiveString | ||
+ otherButtons: (NSArray *)otherStrings | ||
+ onCancel: (void (^)(UIActionSheet *))cancelBlock | ||
+ onDestructive: (void (^)(UIActionSheet *))destroyBlock | ||
+ onClickedButton: (void (^)(UIActionSheet *, NSUInteger))clickBlock{ | ||
+__cancelBlock = cancelBlock; | ||
+__clickedBlock = clickBlock; | ||
+__destroyBlock = destroyBlock; | ||
+ | ||
+UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:title | ||
+ delegate:(id) [self class] | ||
+ cancelButtonTitle:cancelString | ||
+ destructiveButtonTitle:destructiveString | ||
+ otherButtonTitles:nil]; | ||
+ | ||
+for(NSString *other in otherStrings) | ||
+ [sheet addButtonWithTitle: other]; | ||
+ | ||
+[sheet showInView: view]; | ||
+ | ||
+return sheet; | ||
+} | ||
+ | ||
+#pragma mark - Private Static delegate | ||
++(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ | ||
+if([actionSheet destructiveButtonIndex] == buttonIndex && __destroyBlock) | ||
+ __destroyBlock(actionSheet); | ||
+else if([actionSheet cancelButtonIndex] == buttonIndex && __cancelBlock) | ||
+ __cancelBlock(actionSheet); | ||
+else if(__clickedBlock) | ||
+ __clickedBlock(actionSheet, buttonIndex); | ||
+} | ||
+ | ||
++(void)actionSheetCancel:(UIActionSheet *)actionSheet{ | ||
+if(__cancelBlock) | ||
+ __cancelBlock(actionSheet); | ||
+} | ||
+ | ||
+@end |
相关文章推荐
- 自定义UIActionSheet
- 封装同步的UIActionSheet
- UIKit 框架之UIActionSheet
- iOS开发-UIActionSheet简单介绍
- UIActionSheet的使用
- UIAlertView和UIActionSheet
- 自定义UIActionSheet的颜色IOS8前后的区别
- UIActionSheet,UIAlertView技术分享
- ios 9.0 后用UIAlertController代替了UIAlertView弹框 和 UIActionSheet下弹框
- iOS UIActionSheet的基本使用
- 介绍UIALertView和UIActionSheet的用法。
- [iPhone开发之控件的使用]UIActionSheet的各种属性、方法及代理的使用
- UIActionSheet的Cancel按钮消失
- UIActionSheet设置delegate为self时出现警告
- UIActionSheet最后一个按钮没有响应的解决办法
- iOS UIAlertView 和 UIActionSheet 的使用
- [置顶] MMActionSheet介绍(自定义的UIActionSheet弹出框组件)
- iPhone开发--UIActionSheet的按钮不灵敏
- UIActionSheet,UIAlertView等UI控件用法