国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用block改寫UIButton點(diǎn)擊事件和UIAlerView的按鈕點(diǎn)擊代理方法

2019-11-14 18:20:42
字體:
供稿:網(wǎng)友
1.用block改寫UIButton點(diǎn)擊事件
在這里給給出兩種方式.
(1)自定義BlockButton,在初始化的時(shí)候給出按鈕的樣式(自定義)
自定義一個(gè)BlockButton繼承UIButton,然后在里面用
addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
這個(gè)方法觸發(fā)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         // 調(diào)用此方法以觸發(fā)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     // 創(chuàng)建一個(gè)"確定按鈕"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(@"按鈕被點(diǎn)擊了");20     }];21     [self.view addSubview:button];22     23     // 創(chuàng)建三個(gè)數(shù)字按鈕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被點(diǎn)擊了",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

其運(yùn)行效果如下:

 

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

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 // 自定義方法,調(diào)用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     // 調(diào)用此方法以觸發(fā)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(@"按鈕被點(diǎn)擊了!");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


其運(yùn)行效果如下:

 

2.用block改寫UIButton點(diǎn)擊事件和UIAlerView的代理
下面再改寫Alert這個(gè)控件,思路與改寫UIButton的點(diǎn)擊事件的第二種方法是一樣的,在自定義的Alert里面用block觸發(fā)點(diǎn)擊事件,而在Alert定義的代碼里執(zhí)行事件觸發(fā)的行為.
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(這只是一個(gè)提示,不需要簽訂代理協(xié)議)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     // 創(chuàng)建一個(gè)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 // 按鈕點(diǎn)擊方法24 - (void)clickAction:(UIButton *)button {25     MyAlertViewBlock *alertView = [[MyAlertViewBlock alloc]initWithTitle:@"測(cè)試"message:@"將UIAlertView的按鈕點(diǎn)擊事件代理用block實(shí)現(xiàn)" cancelButtonTitle:@"取消"otherButtonTitles:@"確定"andTouchBlock:^(NSInteger buttonIndex) {26          //在這里面執(zhí)行觸發(fā)的行為,省掉了代理,這樣的好處是在使用多個(gè)Alert的時(shí)候可以明確定義各自觸發(fā)的行為,不需要在代理方法里判斷是哪個(gè)Alert了27         if (buttonIndex == 0) {28             NSLog(@"取消");29         } else if (buttonIndex == 1) {30             NSLog(@"確定");31         }32     }];33     34     [alertView show];35 }36 37 @end

其運(yùn)行效果如下:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 常德市| 隆昌县| 麻栗坡县| 长岛县| 沙雅县| 白银市| 兰州市| 湾仔区| 简阳市| 大同县| 平昌县| 阳新县| 东兰县| 隆德县| 彩票| 锡林浩特市| 营口市| 濮阳市| 汤原县| 泊头市| 许昌县| 台北县| 开封县| 万州区| 乾安县| 辉县市| 涿州市| 塔河县| 恩平市| 屏东县| 安宁市| 伊吾县| 武鸣县| 河池市| 依兰县| 比如县| 广饶县| 同心县| 平遥县| 普兰店市| 扬中市|