国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

IOS 4中Block實戰之UIActionSheet

移動開發 iOS
熟悉函數指針的朋友對Block不會感冒的,因為它們實質是一樣的,只是叫清一不樣。今天將實戰BLOCK,我們將封裝一個支持Block的UIActionSheet。

IOS 4Block實戰之UIActionSheet是本文介紹的內容,BlockIOS 4的新東西,有了它,源碼的邏輯將更清楚,代碼的可讀性將提高。熟悉函數指針的朋友對Block不會感冒的,因為它們實質是一樣的,只是叫清一不樣。今天將實戰BLOCK,我們將封裝一個支持BlockUIActionSheet。好了廢話少說,直接上代碼:

  1. PLActionSheet.h  
  2.  
  3. #import <UIKit/UIKit.h>     
  4.     
  5. /**   
  6.  * A simple block-enabled API wrapper on top of UIActionSheet.   
  7.  */    
  8. @interface PLActionSheet : NSObject <UIActionSheetDelegate> {    
  9. @private    
  10.     UIActionSheet *_sheet;    
  11.     NSMutableArray *_blocks;    
  12. }    
  13.     
  14. - (id) initWithTitle: (NSString *) title;    
  15.     
  16. - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block;    
  17. - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block;    
  18.     
  19. - (void) showInView: (UIView *) view;    
  20.     
  21. @end    
  22. #import <UIKit/UIKit.h> 
  23.  
  24. /**  
  25.  * A simple block-enabled API wrapper on top of UIActionSheet.  
  26.  */  
  27. @interface PLActionSheet : NSObject <UIActionSheetDelegate> {  
  28. @private  
  29.     UIActionSheet *_sheet;  
  30.     NSMutableArray *_blocks;  
  31. }  
  32.  
  33. - (id) initWithTitle: (NSString *) title;  
  34.  
  35. - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block;  
  36. - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block;  
  37.  
  38. - (void) showInView: (UIView *) view;  
  39.  
  40. @end  
  41. PLActionSheet.m  
  42.  
  43. #import "PLActionSheet.h"     
  44.     
  45. @implementation PLActionSheet    
  46.     
  47. - (id) initWithTitle: (NSString *) title {    
  48.     if ((self = [super init]) == nil)    
  49.         return nil;    
  50.         
  51.     /* Initialize the sheet */    
  52.     _sheet = [[UIActionSheet alloc] initWithTitle: title delegate: self cancelButtonTitle: 
  53. nil destructiveButtonTitle: nil otherButtonTitles: nil];    
  54.     
  55.     /* Initialize button -> block array */    
  56.     _blocks = [[NSMutableArray alloc] init];    
  57.     
  58.     return self;    
  59. }    
  60.     
  61. - (void) dealloc {    
  62.     _sheet.delegate = nil;    
  63.     [_sheet release];    
  64.     
  65.     [_blocks release];    
  66.     
  67.     [super dealloc];    
  68. }    
  69. - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block {    
  70.     [self addButtonWithTitle: title block: block];    
  71.     _sheet_sheet.cancelButtonIndex = _sheet.numberOfButtons - 1;    
  72. }    
  73.     
  74. - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block {    
  75.     [_blocks addObject: [[block copy] autorelease]];    
  76.     [_sheet addButtonWithTitle: title];    
  77. }    
  78.     
  79. - (void) showInView: (UIView *) view {    
  80.     [_sheet showInView: view];    
  81.     
  82.     /* Ensure that the delegate (that's us) survives until the sheet is dismissed */    
  83.     [self retain];    
  84. }    
  85.     
  86. - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex {    
  87.     /* Run the button's block */    
  88.     if (buttonIndex >= 0 && buttonIndex < [_blocks count]) {    
  89.         void (^b)() = [_blocks objectAtIndex: buttonIndex];    
  90.         b();    
  91.     }    
  92.     
  93.     /* Sheet to be dismissed, drop our self reference */    
  94.     [self release];    
  95. }    
  96.     
  97. @end    
  98. #import "PLActionSheet.h"  
  99.  
  100. @implementation PLActionSheet  
  101.  
  102. - (id) initWithTitle: (NSString *) title {  
  103.     if ((self = [super init]) == nil)  
  104.         return nil;  
  105.       
  106.     /* Initialize the sheet */  
  107.     _sheet = [[UIActionSheet alloc] initWithTitle: title delegate: self cancelButtonTitle: 
  108. nil destructiveButtonTitle: nil otherButtonTitles: nil];  
  109.     /* Initialize button -> block array */  
  110.     _blocks = [[NSMutableArray alloc] init];  
  111.  
  112.     return self;  
  113. }  
  114.  
  115. - (void) dealloc {  
  116.     _sheet.delegate = nil;  
  117.     [_sheet release];  
  118.  
  119.     [_blocks release];  
  120.  
  121.     [super dealloc];  
  122. }  
  123.  
  124. - (void) setCancelButtonWithTitle: (NSString *) title block: (void (^)()) block {  
  125.     [self addButtonWithTitle: title block: block];  
  126.     _sheet_sheet.cancelButtonIndex = _sheet.numberOfButtons - 1;  
  127. }  
  128.  
  129. - (void) addButtonWithTitle: (NSString *) title block: (void (^)()) block {  
  130.     [_blocks addObject: [[block copy] autorelease]];  
  131.     [_sheet addButtonWithTitle: title];  
  132. }  
  133.  
  134. - (void) showInView: (UIView *) view {  
  135.     [_sheet showInView: view];  
  136.  
  137.     /* Ensure that the delegate (that's us) survives until the sheet is dismissed */  
  138.     [self retain];  
  139. }  
  140.  
  141. - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex {  
  142.     /* Run the button's block */  
  143.     if (buttonIndex >= 0 && buttonIndex < [_blocks count]) {  
  144.         void (^b)() = [_blocks objectAtIndex: buttonIndex];  
  145.         b();  
  146.     }  
  147.  
  148.     /* Sheet to be dismissed, drop our self reference */  
  149.     [self release];  
  150. }  
  151.  
  152. @end 

用法如下:

  1. - (void) displaySheet {    
  2.     PLActionSheet *sheet = [[PLActionSheet alloc] initWithTitle: @"Destination"];    
  3.     /* A re-usable block that simply displays an alert message */    
  4.     void (^alert)(NSString *) = ^(NSString *message) {    
  5.         UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Destination Selected"                                 
  6.       message: message                                                   
  7.  delegate: nil                                        
  8.    cancelButtonTitle: @"OK"                                       
  9.    otherButtonTitles: nil];    
  10.         [alert show];    
  11.  
  12.         [alert release];    
  13.     };    
  14.     [sheet addButtonWithTitle: @"Work" block: ^{    
  15.         alert(@"Work selected");    
  16.     }];    
  17.     [sheet addButtonWithTitle: @"Home" block: ^{    
  18.         alert(@"Home selected");    
  19.     }];    
  20.     [sheet addButtonWithTitle: @"School" block: ^{    
  21.         alert(@"School selected");    
  22.     }];     
  23.     [sheet setCancelButtonWithTitle: @"Cancel" block: ^{}];    
  24.      
  25.     [sheet showInView: self.window];    
  26.     [sheet release];    
  27. }    
  28. - (void) displaySheet {  
  29.     PLActionSheet *sheet = [[PLActionSheet alloc] initWithTitle: @"Destination"];  
  30.     /* A re-usable block that simply displays an alert message */  
  31.     void (^alert)(NSString *) = ^(NSString *message) {  
  32.         UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Destination Selected"         
  33.         message: message                                              
  34.       delegate: nil                                        
  35.    cancelButtonTitle: @"OK"                                  
  36.       otherButtonTitles: nil];  
  37.         [alert show];  
  38.         [alert release];  
  39.     };  
  40.       
  41.     [sheet addButtonWithTitle: @"Work" block: ^{  
  42.         alert(@"Work selected");  
  43.     }];  
  44.     [sheet addButtonWithTitle: @"Home" block: ^{  
  45.         alert(@"Home selected");  
  46.     }];  
  47.     [sheet addButtonWithTitle: @"School" block: ^{  
  48.         alert(@"School selected");  
  49.     }];  
  50.     [sheet setCancelButtonWithTitle: @"Cancel" block: ^{}];  
  51.     [sheet showInView: self.window];  
  52.     [sheet release];  

采用BLOCK的方法,源碼可讀性大大增強。如果我們在同一個Controller里需要多個UIActionSheet, 而只有一個delegate方法,那在這個delegate方法里就要跟蹤現在是哪一個UIActionSheet,這樣就會有很多if else的代,也難于維護。以后將多采用BLOCK來寫程序了。

小結:IOS 4Block實戰之UIActionSheet的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2013-07-19 12:52:50

iOS中BlockiOS開發學習

2017-03-07 09:45:43

iOSBlock開發

2013-07-19 14:35:59

iOS中BlockiOS開發學習

2013-07-19 14:00:13

iOS中BlockiOS開發學習

2013-06-04 15:41:31

iOS開發移動開發block

2025-01-10 09:47:43

blockSDKiOS

2013-07-19 13:16:26

iOS中BlockiOS開發學習內存管理

2011-08-01 18:44:16

iPhone開發 UIALertVie UIActionSh

2011-08-16 10:45:25

iPhone開發控件

2010-09-03 10:18:06

CSSdisplay:inl

2010-09-03 12:55:15

CSSblockinline

2011-07-28 09:49:50

IOS IOS 4 UI

2010-09-16 09:13:09

CSS display

2014-07-30 11:12:09

block

2010-09-09 15:54:00

blockinlineCSS

2011-07-20 11:01:39

2011-08-19 13:51:12

2012-05-01 08:26:00

iOS

2014-05-09 12:59:26

iOS移動互聯網

2025-10-10 09:03:18

點贊
收藏

51CTO技術棧公眾號

蜜桃传媒av| 久色视频在线| 一区二区精品免费视频| 国产精品极品尤物在线观看| 久热国产精品视频| 亚洲欧美国内爽妇网| 91精品国产入口| 亚洲欧美在线高清| 久久久久国产精品人| 国产成人免费视频一区| 久久最新视频| 蜜桃久久av| 亚洲午夜一级| 欧美在线播放| 亚洲电影在线一区二区三区| 日韩电影免费网址| 久久99国内| 亚洲高清极品| 精品国产欧美成人夜夜嗨| 91精品国产麻豆国产自产在线 | 成码无人av片在线观看网站| 国产在线一在线二| 青青草视频在线观看| 在线免费黄色毛片| 视频在线91| 蜜芽视频在线观看| 在线播放av更多| 天堂v视频永久在线播放| 蜜桃臀av在线| 五丁香在线视频| 国产小视频福利在线| 成年网站在线| 岛国中文字幕在线| 国产一线二线在线观看| 91美女精品| 国产综合av| 99久久这里有精品| 国产精品久久久网站| 538国产精品一区二区在线| 国产精品无码电影在线观看| 色影院视频在线| 日韩在线观看| 成年人视频在线免费观看| 全部免费毛片在线播放网站| 手机福利在线| 在线观看免费黄色| 成人在线观看免费网站| 丰满诱人av在线播放| 成人动漫一区| 国产一区二区三区免费在线| 精品欠久久久中文字幕加勒比| 欧美毛片免费观看| 999久久久国产精品| 激情婷婷亚洲| 久久亚洲一区| 国产成人久久精品77777最新版本| 成人av综合一区| 国产蜜臀av在线一区二区三区| 亚洲人成伊人成综合网小说| 亚洲国产另类av| 在线视频国内一区二区| 69堂成人精品免费视频| 日韩成人av网址| 久久精品久久精品亚洲人| 国内伊人久久久久久网站视频 | 午夜欧洲一区| 青青草成人影院| 欧美日韩综合| 日本va欧美va欧美va精品| 国产成人丝袜美腿| 国产精品久久免费看| 日韩欧美有码在线| 欧美成人精品高清在线播放 | 在线观看成人黄色| 欧美人在线视频| 国产精品亚洲网站| 免费看成人片| 国产午夜福利100集发布| a视频免费看| 亚洲综合男人的天堂| 欧美性jizz18性欧美| 日韩精品一区在线| 中文字幕亚洲情99在线| 91高清免费视频| 国产精品一区二区三区在线观| 强开小嫩苞一区二区三区网站| 日本中文字幕高清| 国产在线超碰| 日韩伦理三区| 欧美a一欧美| 欧美资源在线| 国产日韩亚洲欧美综合| 久久性天堂网| aa成人免费视频| 亚洲成人偷拍| 91福利在线播放| wwww.国产| 国产色91在线| 蜜臀av.com| 91亚洲自偷观看高清| 视频一区二区三区免费观看| 女人色偷偷aa久久天堂| 宅男宅女性影片资源在线1| 欧美日韩综合视频网址| 欧美中日韩在线| 91在线免费观看网站| 99视频精品| 97se亚洲综合| 久久久夜夜夜| 在线国产一区二区| 欧美成人性生活| 国产麻豆一区| 97视频中文字幕| 久久久久999| 欧美日本三级| 精品国产视频在线| 亚洲欧洲日产国码二区| av2020不卡| 亚洲国产毛片完整版| 日韩精品第二页| 色婷婷亚洲十月十月色天| 色婷婷av一区二区三区软件 | 日韩成人午夜电影| 66m—66摸成人免费视频| 日韩精品中文字幕在线一区| 亚洲欧洲激情在线| 国产精品xx| 欧美激情视频网| 成人av集中营| 精品国产依人香蕉在线精品| 欧美大胆成人| 国产v综合ⅴ日韩v欧美大片| 国产毛片一区二区三区| 国产精品羞羞答答| 午夜性色一区二区三区免费视频| 国产精品xxx视频| 九九在线高清精品视频| 欧美一级高清免费播放| 99成人超碰| 日本五级黄色片| 欧美性大战久久久| 草草草在线视频| 国产精品一品二品| 天堂91在线| 久青草国产97香蕉在线视频| 亚洲人成久久| 日韩精品无码一区二区三区免费| 精品精品国产高清a毛片牛牛 | 久久人妻无码一区二区| 91黄色在线看| 99re6在线视频| 草草草视频在线观看| 韩国无码av片在线观看网站| 在线观看日韩片| 久久国产精品精品国产色婷婷| 色一情一区二区三区四区| 日本www在线播放| 日本韩国欧美| 欧美精品91| 日韩欧美视频一区二区三区| 国产一区二区三区视频在线观看| 欧美日韩国产123区| 视频一区二区三| 欧美成人毛片| 日本一区二区不卡视频| 国产九色精品| 老鸭窝av在线| 亚洲欧洲一级| 国产一区二区三区黄视频| 亚洲高清不卡在线观看| 国产精品激情av电影在线观看| 最近97中文超碰在线| 国产日韩视频在线| 色综合久久久久| 亚洲v国产v| av在线二区| 精品一区二区三区在线观看国产| 4k岛国日韩精品**专区| 日韩精品电影在线| 伊人国产在线| 国精产品一区二区| 99精品久久久| 午夜电影福利网| 国产精品第七影院| 精品动漫一区| 国产在线a不卡| 亚洲午夜av| 日本粉色视频在线观看| 成人在线观看91| 亚洲日本中文字幕免费在线不卡| 最好看的中文字幕久久| 爽好久久久欧美精品| 国产精品一区免费在线| 日本成人网址| xxxx69视频| 一本色道久久88亚洲精品综合| 欧美mv日韩mv国产网站app| 外国成人免费视频| 国产免费黄色一级片| 欧美三级黄美女|