UIActionSheet+Blocks
来源:互联网 发布:临高启明知乎 编辑:程序博客网 时间:2024/04/30 04:27
UIActionSheet+Blocks.h
@@ -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
73 UIActionSheet+Blocks.m
@@ -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+Blocks
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- UIActionSheet
- blocks
- CODE 119: Integer to Roman
- Cpp Primer CH11 异常处理
- 统计单词个数
- ubuntu下mysql及mysql administrator的下载安装
- 以安装wordpress为例搭建apache+php+mysql的Web服务环境
- UIActionSheet+Blocks
- 菜鸟的学习之路(9) — ArrayList类
- android layout 布局
- 最大公约数和最小公倍数
- python之路之python爬虫
- HDU 1022 Train Problem I
- 黑马程序员--数组
- 中庸之道
- JAVA系列-设计模式-原型模式