UIButton+Block分类代替addTarget实现快捷监听按钮点击
2017-02-10 10:09
363 查看
平常我们写button的点击一般都是用addTarget
这种写法还需要单独去写点击执行的方法;
以下代码是把addTarget写入分类,用block传值,这样当监听点击时直接在block传入点击事件即可
UIButton+Block.h
UIButton+Block.m
调用示例:
需要注意循环引用
[_button addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];
这种写法还需要单独去写点击执行的方法;
以下代码是把addTarget写入分类,用block传值,这样当监听点击时直接在block传入点击事件即可
UIButton+Block.h
#import <UIKit/UIKit.h> typedef void(^ButtonBlock)(UIButton* btn); @interface UIButton (Block) - (void)addAction:(ButtonBlock)block; - (void)addAction:(ButtonBlock)block forControlEvents:(UIControlEvents)controlEvents; @end
UIButton+Block.m
#import "UIButton+Block.h" #import <objc/runtime.h> @implementation UIButton (Block) static char ActionTag; - (void)addAction:(ButtonBlock)block { objc_setAssociatedObject(self, &ActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC); [self addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; } - (void)addAction:(ButtonBlock)block forControlEvents:(UIControlEvents)controlEvents { objc_setAssociatedObject(self, &ActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC); [self addTarget:self action:@selector(action:) forControlEvents:controlEvents]; } - (void)action:(id)sender { ButtonBlock blockAction = (ButtonBlock)objc_getAssociatedObject(self, &ActionTag); if (blockAction) { blockAction(self); } } @end
调用示例:
__weak typeof (self)weakSelf = self; [footer.button addAction:^(UIButton *btn) { WTAddressControlViewController *vc = [[WTAddressControlViewController alloc] initWithViewControllerType:WTAddressControlTypeAdd]; vc.popBlock = ^(){ [weakSelf loadData]; }; [weakSelf.navigationController pushViewController:vc animated:YES]; }];
需要注意循环引用
相关文章推荐
- iOS 自定义UITableViewCell上添加UIButton按钮如何确定点击了哪一行,代码块实现
- ios开发-UI基础-应用管理(单纯界面)改进5-使用代理实现监听下载按钮的点击(delegate)
- 如何实现js展开收起(折叠)效果呢?例如:一段内容过长了,我限制他显示为20个字内,但是超出了20的就先用省略号代替,然后后面添加一个展开,点击展开后就显示所有的内容,这时候展开按钮就变成了 折叠按钮
- 使用选项卡TabWidget与TabHost实现底部或者顶部四个分类按钮 点击切换对应的fragment
- iOS开发利用UIButton和UIImageView的区别分辨哪些控件有addTarget监听事件这个方法
- xcode UIButton创建、监听按钮点击、自定义按钮 、状态 、内边距
- js实现监听button按钮点击事件触发file点击事件
- iOS 自定义UITableViewCell上添加UIButton按钮如何确定点击了哪一行,代码块实现
- 封装顶部选择按钮(用block实现在当前控制器下面添加button点击方法)
- iOS 自定义UITableViewCell上添加UIButton按钮如何确定点击了哪一行,代码块实现
- 用block改写UIButton点击事件和UIAlerView的按钮点击代理方法
- Kotlin 实现按钮点击跳转监听事件
- 监听按钮点击事件实现的三种方法
- IOS之UI--自定义按钮实现代理监听点击事件
- iphone开发之UIButton按钮的使用(一)拖线实现 多个按钮分别用多个方法实现事件监听
- IOS之UI--自定义按钮实现代理监听点击事件
- vuejs如何实现被点击按钮添加addClass,上一次被点击过的removeClass
- 使用Jquery blockUI插件实现在点击按钮提交后阻止再次点击,当处理完后解除阻止
- 使用:target实现点击按钮切换图片的功能(纯CSS)
- 不使用JS,使用CSS3 target 以及 动画效果实现,点击一下弹出,并且保持弹出状态,然后再点击一下弹回的导航栏(或者可以叫做按钮)