亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用block改寫UIButton點擊事件和UIAlerView的按鈕點擊代理方法

2019-11-14 18:20:42
字體:
來源:轉載
供稿:網友
1.用block改寫UIButton點擊事件
在這里給給出兩種方式.
(1)自定義BlockButton,在初始化的時候給出按鈕的樣式(自定義)
自定義一個BlockButton繼承UIButton,然后在里面用
addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
這個方法觸發block.
 
MyBlockButton.h
 1 #import <UIKit/UIKit.h> 2  3 @class MyBlockButton;      // 此處一定要聲明 4 typedef void(^TouchBlock)(MyBlockButton *button); 5  6 @interface MyBlockButton : UIButton 7  8 @PRoperty (copy, nonatomic) TouchBlock block; 9 10 @end    

 

MyBlockButton.m

 1 #import "MyBlockButton.h" 2  3 @implementation MyBlockButton 4  5 -(instancetype)initWithFrame:(CGRect)frame 6 { 7     self = [super initWithFrame:frame]; 8      9     if (self) {10         // 按鈕邊框美化11         self.layer.borderWidth = 1;12         self.layer.borderColor = [UIColor lightGrayColor].CGColor;13         self.layer.cornerRadius = 3;14         self.layer.masksToBounds = YES;15         16         // 為按鈕添加陰影17         self.layer.shadowColor = [UIColor blackColor].CGColor;18         self.layer.shadowOffset = CGSizeMake(3, 3);19         self.layer.shadowRadius = 3;20         21         // 調用此方法以觸發block22         [self addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];23     }24     return self;25 }26 27 - (void)clickAction:(MyBlockButton *)button28 {29     _block(button);30 }31 32 @end

 

ViewController.h里面沒有添加任何代碼

ViewController.m

 1 #import "ViewController.h" 2 #import "MyBlockButton.h" 3  4 @interface ViewController () 5  6 @end 7  8 @implementation ViewController 9 10 - (void)viewDidLoad {11     [super viewDidLoad];12     13     // 創建一個"確定按鈕"14     MyBlockButton *button = [[MyBlockButton alloc]initWithFrame:CGRectMake(35, 100, 260, 30)];15     [button setTitle:@"確定" forState:UIControlStateNormal];16     [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];17     button.backgroundColor = [UIColor orangeColor];18     [button setBlock:^(MyBlockButton *blockButton) {19         NSLog(@"按鈕被點擊了");20     }];21     [self.view addSubview:button];22     23     // 創建三個數字按鈕24     for (int i = 1; i <= 3; i ++) {25         MyBlockButton *btn = [[MyBlockButton alloc]initWithFrame:CGRectMake(70 * i, 200, 60, 30)];26         [btn setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];27         [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];28         btn.backgroundColor = [UIColor redColor];29         btn.block = ^(MyBlockButton *blockBtn) {30             NSLog(@"按鈕%d被點擊了",i);31         };32         33         [self.view addSubview:btn];34     }35 }36 37 - (void)didReceiveMemoryWarning {38     [super didReceiveMemoryWarning];39     // Dispose of any resources that can be recreated.40 }41 42 @end

其運行效果如下:

 

(2)接下來給出的方法中,使用自定義方法調用block;繼承自UIButton,在初始化使用的時候還需要設置其樣式.

MyButtonBlock.h

 1 #import <UIKit/UIKit.h> 2  3 typedef void(^TouchBlock)(UIButton *button); 4  5 @interface MyButtonBlock : UIButton 6  7 @property (copy, nonatomic) TouchBlock block; 8  9 // 自定義方法,調用block10 - (void)clikAction:(TouchBlock)block;11 12 @end

 

MyButtonBlock.m

 1 #import "MyButtonBlock.h" 2  3 @implementation MyButtonBlock 4  5 - (void)clikAction:(TouchBlock)block 6 { 7     _block = block; 8     // 調用此方法以觸發block 9     [self addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];10 }11 12 - (void)clickButton:(UIButton *)button13 {14     _block(button);15 }16 17 @end

 

ViewController.h里面沒有添加任何代碼

ViewController.m

 1 #import "ViewController.h" 2 #import "MyButtonBlock.h" 3  4 @interface ViewController () 5  6 @end 7  8 @implementation ViewController 9 10 - (void)viewDidLoad {11     [super viewDidLoad];12     13     MyButtonBlock *buttonBlock = [MyButtonBlock buttonWithType:UIButtonTypeCustom];14     buttonBlock.frame = CGRectMake(35, 100, 300, 30);15     [buttonBlock setTitle:@"確定" forState:UIControlStateNormal];16     [buttonBlock setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];17     buttonBlock.backgroundColor = [UIColor orangeColor];18 19     [buttonBlock clikAction:^(UIButton *button) {20         NSLog(@"按鈕被點擊了!");21     }];22     23     [self.view addSubview:buttonBlock];24 }25 26 - (void)didReceiveMemoryWarning {27     [super didReceiveMemoryWarning];28     // Dispose of any resources that can be recreated.29 }30 31 @end


其運行效果如下:

 

2.用block改寫UIButton點擊事件和UIAlerView的代理
下面再改寫Alert這個控件,思路與改寫UIButton的點擊事件的第二種方法是一樣的,在自定義的Alert里面用block觸發點擊事件,而在Alert定義的代碼里執行事件觸發的行為.
MyAlertViewBlock.h
 1 #import <UIKit/UIKit.h> 2  3 typedef void(^TouchBlock)(NSInteger buttonIndex); 4  5 @interface MyAlertViewBlock : UIAlertView 6  7 @property (copy, nonatomic) TouchBlock block; 8  9 // 自定義初始化方法10 - (instancetype)initWithTitle:(NSString *)title11                       message:(NSString *)message12             cancelButtonTitle:(NSString *)cancelButtonTitle13             otherButtonTitles:(NSString *)otherButtonTitles14                 andTouchBlock:(TouchBlock)block;15 16 @end

 

 

MyAlertViewBlock.m

 1 #import "MyAlertViewBlock.h" 2  3 @implementation MyAlertViewBlock 4  5 - (instancetype)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles andTouchBlock:(TouchBlock)block 6 { 7     // 先初始化父類的方法 8     self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil]; 9     if (self) {10         self.block = block;11     }12     return self;13 }14 15 #pragma mark - UIAlertViewDelegate(這只是一個提示,不需要簽訂代理協議)16 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex17 {18     _block(buttonIndex);19 }20 21 @end

 

ViewController.h里面沒有添加任何代碼

ViewController.m

 1 #import "ViewController.h" 2 #import "MyAlertViewBlock.h" 3  4 @interface ViewController () 5  6 @end 7  8 @implementation ViewController 9 10 - (void)viewDidLoad {11     [super viewDidLoad];12     13     // 創建一個UIButton(用于彈出UIAlertView)14     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];15     button.frame = CGRectMake(35, 100, 260, 30);16     button.backgroundColor = [UIColor orangeColor];17     [button setTitle:@"確定" forState:UIControlStateNormal];18     [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];19     [button addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];20     [self.view addSubview:button];21 }22 23 // 按鈕點擊方法24 - (void)clickAction:(UIButton *)button {25     MyAlertViewBlock *alertView = [[MyAlertViewBlock alloc]initWithTitle:@"測試"message:@"將UIAlertView的按鈕點擊事件代理用block實現" cancelButtonTitle:@"取消"otherButtonTitles:@"確定"andTouchBlock:^(NSInteger buttonIndex) {26          //在這里面執行觸發的行為,省掉了代理,這樣的好處是在使用多個Alert的時候可以明確定義各自觸發的行為,不需要在代理方法里判斷是哪個Alert了27         if (buttonIndex == 0) {28             NSLog(@"取消");29         } else if (buttonIndex == 1) {30             NSLog(@"確定");31         }32     }];33     34     [alertView show];35 }36 37 @end

其運行效果如下:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品自拍视频在线观看| 91啪国产在线| 色偷偷噜噜噜亚洲男人的天堂| 亚洲第一区第二区| 在线观看亚洲区| 国产精品91一区| 丰满岳妇乱一区二区三区| 这里只有精品久久| 久久精品国产视频| 欧美黑人极品猛少妇色xxxxx| 亚洲激情电影中文字幕| 精品爽片免费看久久| 欧美激情国内偷拍| xxx欧美精品| 在线日韩精品视频| 91免费视频国产| 黑人巨大精品欧美一区二区三区| 狠狠久久五月精品中文字幕| 国产精品久久一| 欧美日韩免费网站| 伊人伊成久久人综合网小说| 中文字幕v亚洲ⅴv天堂| 国产精品视频精品| 中文字幕九色91在线| 欧美激情在线狂野欧美精品| 久久综合九色九九| 欧美激情一区二区三区成人| 亚洲欧美日韩精品久久亚洲区| 欧美成年人视频网站| 国产亚洲精品一区二区| 亚洲一二三在线| 亚洲精品白浆高清久久久久久| 91久久综合亚洲鲁鲁五月天| 91精品国产乱码久久久久久久久| 久久久久久久久久av| 亚洲最新中文字幕| 亚洲成人av在线播放| 日韩精品在线观看视频| 日韩av电影手机在线观看| 日韩av在线天堂网| 亚洲精品一二区| 日本成人激情视频| 亚洲欧美日本伦理| 精品一区精品二区| 91在线高清视频| 国产精品欧美风情| 亚洲性生活视频在线观看| 97精品国产91久久久久久| 成人欧美在线观看| 18性欧美xxxⅹ性满足| 7m精品福利视频导航| 久久五月天色综合| 亚洲欧美日韩国产精品| 中文字幕不卡在线视频极品| 国产精品扒开腿做爽爽爽视频| 成人免费网站在线| 91久久久在线| 亚洲美女在线视频| 久久免费在线观看| 久久久久久久久电影| 55夜色66夜色国产精品视频| 欧美大尺度在线观看| 日韩av中文字幕在线播放| 日韩精品极品在线观看播放免费视频| 久久久噜噜噜久噜久久| 欧美视频在线观看免费| 亚洲国产精品免费| 欧美国产一区二区三区| 欧美xxxx18性欧美| 欧美激情久久久久| 色综合色综合久久综合频道88| 久久琪琪电影院| 在线激情影院一区| 国产美女被下药99| 亚洲无限av看| 久久久久久国产精品久久| 色偷偷噜噜噜亚洲男人的天堂| 日韩三级成人av网| 成人精品久久久| 国产精品av电影| 成人免费福利在线| 岛国精品视频在线播放| 久久精品国产99国产精品澳门| 日韩精品在线观看视频| 亚洲一区第一页| 亚洲网在线观看| 国产日本欧美视频| 国产日韩欧美自拍| 中文字幕久热精品视频在线| 久久久亚洲欧洲日产国码aⅴ| 美女久久久久久久久久久| 91精品国产91久久久久久吃药| 中文字幕一精品亚洲无线一区| 亚洲国产精品人久久电影| 欧美成人免费在线观看| 97久久久久久| 成人久久一区二区三区| 在线亚洲国产精品网| 精品自在线视频| 黑人精品xxx一区| 亚洲欧美福利视频| 日韩精品免费在线视频观看| 色诱女教师一区二区三区| 午夜美女久久久久爽久久| 国产精品1区2区在线观看| 亚洲一区二区三区在线视频| 日韩欧美一区二区在线| 久久影院资源站| 国产精品99导航| 中日韩美女免费视频网站在线观看| 91av在线播放| 欧美人与性动交| 久久精品国产91精品亚洲| 国产一区二区三区视频免费| 国产精品久久久久久久久久新婚| 午夜精品久久久久久久白皮肤| 亚洲国产99精品国自产| 亚洲午夜未满十八勿入免费观看全集| 日韩影视在线观看| 97视频在线观看播放| 亚洲成人久久久久| 久久国产精品影片| 亚洲香蕉在线观看| 国产91精品青草社区| 亚洲欧美激情四射在线日| 亚洲国产精品久久久| 精品无人区乱码1区2区3区在线| 欧美激情视频给我| 亚洲第一黄色网| 亚洲欧美另类自拍| 日韩精品在线免费播放| 久久人体大胆视频| 国产欧美一区二区三区久久人妖| 456国产精品| 亚洲国产成人精品久久久国产成人一区| 国产aⅴ夜夜欢一区二区三区| 久久免费在线观看| 欧美精品在线免费| 国产精品福利在线观看网址| 亚洲a成v人在线观看| 亚洲欧美综合图区| 久久躁狠狠躁夜夜爽| 国产在线观看精品一区二区三区| 色久欧美在线视频观看| 大桥未久av一区二区三区| 成人黄色在线播放| 成人久久久久久久| 精品福利一区二区| 色婷婷亚洲mv天堂mv在影片| 96精品久久久久中文字幕| 日韩av男人的天堂| 亚洲大胆美女视频| 亚洲精品成a人在线观看| 久久777国产线看观看精品| 一区二区三区日韩在线| 亚洲国产精品va在线看黑人| 成人网欧美在线视频| 久久久久久久久久久av| 久久九九国产精品怡红院| 97视频在线观看播放| 久久久久久久久久国产精品| 亚洲高清免费观看高清完整版| 全色精品综合影院| 亚洲午夜久久久影院|