怎么用block给Button和AlertView添加点击事件
来源:互联网 发布:linux系统开发 编辑:程序博客网 时间:2024/05/01 02:32
大致就是自定义一个BlockButton继承UIButton,然后在里面用
addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
这个方法触发block,代码很简单,不多说了
BlockButton.h
@class BlockButton;
typedef void (^TouchButton)(BlockButton*);
@interface BlockButton : UIButton
@property(nonatomic,copy)TouchButton block;
@end
BlockButton.m
#import "BlockButton.h"
#import <QuartzCore/QuartzCore.h>//这里要注意,如果想使用UIButton的layer属性更改button样式,要添加QuartzCore.framewor并且在头文件导入。
@implementation BlockButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.layer.masksToBounds = YES;
self.layer.cornerRadius = 10;
self.layer.borderWidth = 2;
self.layer.shadowRadius = 2;
self.layer.shadowColor = [UIColor grayColor].CGColor;
self.layer.borderColor = [UIColor redColor].CGColor;
[self addTarget:self action:@selector(touchAction:) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)touchAction:(id)sender{
_block(self);
}
@end
ViewController.h里面没有添加任何代码
下面是ViewController.m
#import "ViewController.h"
#import "BlockButton.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
BlockButton *button = [[BlockButton alloc]initWithFrame:CGRectMake(100, 100, 40, 20)];
[button setBlock:^(BlockButton *button){
NSLog(@"按下去了");
}];
[self.view addSubview:button];
[button release];
for (int i = 0; i < 3; i ++) {
BlockButton *btn = [[BlockButton alloc]initWithFrame:CGRectMake(40 + i*70, 200, 50, 25)];
[btn setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btn.block = ^(BlockButton *btn){
NSLog(@"按下%d",i);
};
[self.view addSubview:btn];
[btn release];
}
}
@end
下面再改写Alert这个控件,思路是一样的,在自定义的Alert里面用block触发点击事件,而在Alert定义的代码里执行事件触发的行为。
AlertBlock.h
#import <UIKit/UIKit.h>
@class AlertBlock;
typedef void (^TouchBlock)(NSInteger);
@interface AlertBlock : UIAlertView
@property(nonatomic,copy)TouchBlock block;
//需要自定义初始化方法,调用Block
- (id)initWithTitle:(NSString *)title
message:(NSString *)message
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString*)otherButtonTitles
block:(TouchBlock)block;
@end
AlertBlock.m
#import "AlertBlock.h"
@implementation AlertBlock
- (id)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString*)otherButtonTitles block:(TouchBlock)block{
self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil];//注意这里初始化父类的
if (self) {
self.block = block;
}
return self;
}
//#pragma mark -AlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
//这里调用函数指针_block(要传进来的参数);
_block(buttonIndex);
}
@end
ViewController.m
#import "ViewController.h"
#import "AlertBlock.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2, 80, 30);
[self.view addSubview:button];
}
- (void)buttonAction:(id)sender{
AlertBlock *alert = [[AlertBlock alloc]initWithTitle:@"提示" message:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定" block:^(NSInteger buttonIndex){
//在这里面执行触发的行为,省掉了代理,这样的好处是在使用多个Alert的时候可以明确定义各自触发的行为,不需要在代理方法里判断是哪个Alert了
if (buttonIndex == 0) {
NSLog(@"取消");
}else if (buttonIndex == 1){
NSLog(@"确定");
}
}];
[alert show];
[alert release];
}
addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
这个方法触发block,代码很简单,不多说了
BlockButton.h
@class BlockButton;
typedef void (^TouchButton)(BlockButton*);
@interface BlockButton : UIButton
@property(nonatomic,copy)TouchButton block;
@end
BlockButton.m
#import "BlockButton.h"
#import <QuartzCore/QuartzCore.h>//这里要注意,如果想使用UIButton的layer属性更改button样式,要添加QuartzCore.framewor并且在头文件导入。
@implementation BlockButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.layer.masksToBounds = YES;
self.layer.cornerRadius = 10;
self.layer.borderWidth = 2;
self.layer.shadowRadius = 2;
self.layer.shadowColor = [UIColor grayColor].CGColor;
self.layer.borderColor = [UIColor redColor].CGColor;
[self addTarget:self action:@selector(touchAction:) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)touchAction:(id)sender{
_block(self);
}
@end
ViewController.h里面没有添加任何代码
下面是ViewController.m
#import "ViewController.h"
#import "BlockButton.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
BlockButton *button = [[BlockButton alloc]initWithFrame:CGRectMake(100, 100, 40, 20)];
[button setBlock:^(BlockButton *button){
NSLog(@"按下去了");
}];
[self.view addSubview:button];
[button release];
for (int i = 0; i < 3; i ++) {
BlockButton *btn = [[BlockButton alloc]initWithFrame:CGRectMake(40 + i*70, 200, 50, 25)];
[btn setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btn.block = ^(BlockButton *btn){
NSLog(@"按下%d",i);
};
[self.view addSubview:btn];
[btn release];
}
}
@end
下面再改写Alert这个控件,思路是一样的,在自定义的Alert里面用block触发点击事件,而在Alert定义的代码里执行事件触发的行为。
AlertBlock.h
#import <UIKit/UIKit.h>
@class AlertBlock;
typedef void (^TouchBlock)(NSInteger);
@interface AlertBlock : UIAlertView
@property(nonatomic,copy)TouchBlock block;
//需要自定义初始化方法,调用Block
- (id)initWithTitle:(NSString *)title
message:(NSString *)message
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString*)otherButtonTitles
block:(TouchBlock)block;
@end
AlertBlock.m
#import "AlertBlock.h"
@implementation AlertBlock
- (id)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString*)otherButtonTitles block:(TouchBlock)block{
self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil];//注意这里初始化父类的
if (self) {
self.block = block;
}
return self;
}
//#pragma mark -AlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
//这里调用函数指针_block(要传进来的参数);
_block(buttonIndex);
}
@end
ViewController.m
#import "ViewController.h"
#import "AlertBlock.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2, 80, 30);
[self.view addSubview:button];
}
- (void)buttonAction:(id)sender{
AlertBlock *alert = [[AlertBlock alloc]initWithTitle:@"提示" message:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定" block:^(NSInteger buttonIndex){
//在这里面执行触发的行为,省掉了代理,这样的好处是在使用多个Alert的时候可以明确定义各自触发的行为,不需要在代理方法里判断是哪个Alert了
if (buttonIndex == 0) {
NSLog(@"取消");
}else if (buttonIndex == 1){
NSLog(@"确定");
}
}];
[alert show];
[alert release];
}
0 0
- 怎么用block给Button和AlertView添加点击事件
- iOS,OC给button添加block点击事件扩展
- iOS开发封装带有Button的UIView控件,使用block给button添加点击事件
- 利用Associative机制为UIAlertView添加一个Block属性,将AlertView与button的响应事件关联
- 给button添加点击事件,打开一个新的窗体
- ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
- ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
- ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
- ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
- UIButton添加block点击事件
- iOS开发封装带有Button的UIView控件,使用代理给button添加点击事件
- UIButton的点击事件写成Block,AlertView的delegate写成Block
- 安卓给button增加点击事件
- RecycleView怎么添加点击事件
- 给UIImageView添加点击事件
- 给UIImageView添加点击事件
- 给label添加点击事件
- 给ImageView添加点击事件
- 编译webrtc audio_device提示的‘typeof’问题
- Android监听软键盘的弹起和隐藏
- C语言学习笔记4
- 机器学习中的维度灾难(一)
- java中static和final关键字
- 怎么用block给Button和AlertView添加点击事件
- 关于无法卸载和安装VISIO2010的问题
- OC 数组总结(NSArray,NSMutableArray)
- 求职记录【又名求职杯具史】~
- fzu月赛(2015.11)
- 利用php利用root权限执行shell脚本必须进行以下几个步骤
- iOS应用开发之Core Data数据持久化存储笔记
- go常见error解决办法
- Java课程设计笔记-用org.apache.tools.zip中的类压缩/解压zip文件