当前位置:新注册送38元体验金 > 新注册送38元体验金操作系统 > IOS 4中Block实战之UIActionSheet

IOS 4中Block实战之UIActionSheet

文章作者:新注册送38元体验金操作系统 上传时间:2019-08-22

IOS 4Block实战之UIActionSheet是本文介绍的内容,BlockIOS 4的新东西,有了它,源码的逻辑将更清楚,代码的可读性将提高。熟悉函数指针的朋友对Block不会感冒的,因为它们实质是一样的,只是叫清一不样。今天将实战BLOCK,我们将封装一个支持BlockUIActionSheet。好了废话少说,直接上代码:

4 中 Block 实战之 UIActionSheet 是本文介绍的内容, Block 是 IOS 4 的新东西,有了它,源码的逻辑将更清楚,代码的可读性将提高。熟悉函数...

- (void) displaySheet {        PLActionSheet *sheet = [[PLActionSheet alloc] initWithTitle: @"Destination"];        /* A re-usable block that simply displays an alert message */        void (^alert)(NSString *) = ^(NSString *message) {            UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Destination Selected"                                       message: message                                                    delegate: nil                                           cancelButtonTitle: @"OK"                                          otherButtonTitles: nil];            [alert show];             [alert release];        };        [sheet addButtonWithTitle: @"Work" block: ^{            alert(@"Work selected");        }];        [sheet addButtonWithTitle: @"Home" block: ^{            alert(@"Home selected");        }];        [sheet addButtonWithTitle: @"School" block: ^{            alert(@"School selected");        }];         [sheet setCancelButtonWithTitle: @"Cancel" block: ^{}];             [sheet showInView: self.window];        [sheet release];    }    - (void) displaySheet {      PLActionSheet *sheet = [[PLActionSheet alloc] initWithTitle: @"Destination"];      /* A re-usable block that simply displays an alert message */      void (^alert)(NSString *) = ^(NSString *message) {          UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Destination Selected"                 message: message                                                    delegate: nil                                           cancelButtonTitle: @"OK"                                        otherButtonTitles: nil];          [alert show];          [alert release];      };            [sheet addButtonWithTitle: @"Work" block: ^{          alert(@"Work selected");      }];      [sheet addButtonWithTitle: @"Home" block: ^{          alert(@"Home selected");      }];      [sheet addButtonWithTitle: @"School" block: ^{          alert(@"School selected");      }];      [sheet setCancelButtonWithTitle: @"Cancel" block: ^{}];      [sheet showInView: self.window];      [sheet release];  } 
PLActionSheet.h   #import <UIKit/UIKit.h>         /**    * A simple block-enabled API wrapper on top of UIActionSheet.    */    @interface PLActionSheet : NSObject <UIActionSheetDelegate> {    @private        UIActionSheet *_sheet;        NSMutableArray *_blocks;    }        - (id) initWithTitle: (NSString *) title;        - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block;    - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block;        - (void) showInView: (UIView *) view;        @end    #import <UIKit/UIKit.h>  /**   * A simple block-enabled API wrapper on top of UIActionSheet.   */  @interface PLActionSheet : NSObject <UIActionSheetDelegate> {  @private      UIActionSheet *_sheet;      NSMutableArray *_blocks;  }   - (id) initWithTitle: (NSString *) title;   - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block;  - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block;   - (void) showInView: (UIView *) view;   @end  PLActionSheet.m   #import "PLActionSheet.h"         @implementation PLActionSheet        - (id) initWithTitle: (NSString *) title {        if ((self = [super init]) == nil)            return nil;                /* Initialize the sheet */        _sheet = [[UIActionSheet alloc] initWithTitle: title delegate: self cancelButtonTitle:                    nil destructiveButtonTitle: nil otherButtonTitles: nil];            /* Initialize button -> block array */        _blocks = [[NSMutableArray alloc] init];            return self;    }        - (void) dealloc {        _sheet.delegate = nil;        [_sheet release];            [_blocks release];            [super dealloc];    }    - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block {        [self addButtonWithTitle: title block: block];        _sheet_sheet.cancelButtonIndex = _sheet.numberOfButtons - 1;    }        - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block {        [_blocks addObject: [[block copy] autorelease]];        [_sheet addButtonWithTitle: title];    }        - (void) showInView: (UIView *) view {        [_sheet showInView: view];            /* Ensure that the delegate (that's us) survives until the sheet is dismissed */        [self retain];    }        - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex {        /* Run the button's block */        if (buttonIndex >= 0 && buttonIndex < [_blocks count]) {            void (^b)() = [_blocks objectAtIndex: buttonIndex];            b();        }            /* Sheet to be dismissed, drop our self reference */        [self release];    }        @end    #import "PLActionSheet.h"   @implementation PLActionSheet   - (id) initWithTitle: (NSString *) title {      if ((self = [super init]) == nil)          return nil;            /* Initialize the sheet */      _sheet = [[UIActionSheet alloc] initWithTitle: title delegate: self cancelButtonTitle:           nil destructiveButtonTitle: nil otherButtonTitles: nil];      /* Initialize button -> block array */      _blocks = [[NSMutableArray alloc] init];       return self;  }   - (void) dealloc {      _sheet.delegate = nil;      [_sheet release];       [_blocks release];       [super dealloc];  }   - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block {      [self addButtonWithTitle: title block: block];      _sheet_sheet.cancelButtonIndex = _sheet.numberOfButtons - 1;  }   - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block {      [_blocks addObject: [[block copy] autorelease]];      [_sheet addButtonWithTitle: title];  }   - (void) showInView: (UIView *) view {      [_sheet showInView: view];       /* Ensure that the delegate (that's us) survives until the sheet is dismissed */      [self retain];  }   - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex {      /* Run the button's block */      if (buttonIndex >= 0 && buttonIndex < [_blocks count]) {          void (^b)() = [_blocks objectAtIndex: buttonIndex];          b();      }       /* Sheet to be dismissed, drop our self reference */      [self release];  }   @end 

用法如下:

采用BLOCK的方法,源码可读性大大增强。如果我们在同一个Controller里需要多个UIActionSheet, 而只有一个delegate方法,那在这个delegate方法里就要跟踪现在是哪一个UIActionSheet,这样就会有很多if else的代,也难于维护。以后将多采用BLOCK来写程序了。

小结:IOS 4Block实战之UIActionSheet的内容介绍完了,希望本文对你有所帮助!

本文由新注册送38元体验金发布于新注册送38元体验金操作系统,转载请注明出处:IOS 4中Block实战之UIActionSheet

关键词: