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