封装-给继承自UIView的控件添加点击事件
2017-06-29 16:27
375 查看
在实际开发中,可能会需要给UILabel、UIView等等添加点击事件,目的就是在保留控件自身属性的同时,多一个点击效果,所以这里写了一个UIView的category,用于处理这种情况。
1、.h文件代码如下:
这里声明了一个block,用于在添加点击事件时,直接在block回调里面处理点击的响应事件。
2、.m文件主要代码如下:
这里用到了一个runtime的方法处理block。当然也可以不必像上面那样,可以通过delegate实现。这里只是一个思路,记录一下。
调用的时候也是非常方便,在要实现的地方添加#import “UIView+Tapped.h”,然后在初始化控件的地方添加如下代码即可:
下面是demo里的测试效果
1、.h文件代码如下:
#import <UIKit/UIKit.h> typedef void (^WhenTappedBlock)(); @interface UIView (Tapped) <UIGestureRecognizerDelegate> /*! @method @abstract 单击 @param block 代码块 */ - (void)whenTapped:(WhenTappedBlock)block; @end
这里声明了一个block,用于在添加点击事件时,直接在block回调里面处理点击的响应事件。
2、.m文件主要代码如下:
#import "UIView+Tapped.h" #import <objc/runtime.h> @implementation UIView (Tapped) static char kWhenTappedBlockKey; #pragma mark - Set blocks - (void)setBlock:(WhenTappedBlock)block forKey:(void *)blockKey { self.userInteractionEnabled = YES; objc_setAssociatedObject(self, blockKey, block, OBJC_ASSOCIATION_COPY_NONATOMIC); } - (void)runBlockForKey:(void *)blockKey { WhenTappedBlock block = objc_getAssociatedObject(self, blockKey); if (block) block(); } #pragma mark - When Tapped - (void)whenTapped:(WhenTappedBlock)block { //添加点击手势 UITapGestureRecognizer* gesture = [self addTapGestureRecognizerWithTaps:1 touches:1 selector:@selector(viewWasTapped)]; [self addGestureRecognizer:gesture]; [self setBlock:block forKey:&kWhenTappedBlockKey]; } /*手势点击响应事件*/ - (void)viewWasTapped { [self runBlockForKey:&kWhenTappedBlockKey]; } #pragma mark - addTapGesture - (UITapGestureRecognizer*)addTapGestureRecognizerWithTaps:(NSUInteger)taps touches:(NSUInteger)touches selector:(SEL)selector { UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:selector]; tapGesture.delegate = self; tapGesture.numberOfTapsRequired = taps; tapGesture.numberOfTouchesRequired = touches; return tapGesture; } @end
这里用到了一个runtime的方法处理block。当然也可以不必像上面那样,可以通过delegate实现。这里只是一个思路,记录一下。
调用的时候也是非常方便,在要实现的地方添加#import “UIView+Tapped.h”,然后在初始化控件的地方添加如下代码即可:
[label whenTapped:^{ //这里添加点击响应的方法 }];
下面是demo里的测试效果
相关文章推荐
- iOS开发封装带有Button的UIView控件,使用target-action模式给button添加点击事件
- iOS开发封装带有Button的UIView控件,使用block给button添加点击事件
- iOS开发封装带有Button的UIView控件,使用代理给button添加点击事件
- ios UIView控件设置动画后添加点击事件不起作用
- 在UIView中添加点击事件
- UIView添加手势 然后UITableView 添加进这个View 导致UITableView 的单元格点击事件无效
- 为UIView添加点击事件
- ios scrollview添加点击事件,隐藏控件
- 在UIView中添加点击事件
- IOS - UIView添加点击事件
- iOS UIView 添加点击事件
- 【Swift 2.1】为 UIView 添加点击事件和点击效果
- 在UIView中添加点击事件
- iOS 在添加了UITapGestureRecognizer的UIView上响应按钮的点击事件
- iOS 为移动中的UIView(UIButton )添加点击事件
- 自定义封装导航栏左右按钮点击事件和特定风格的控制器供多个控制器继承—— 当很多导航页面有相似的导航条时
- android 动态添加控件并实现每个子控件的点击事件
- 为ios控件添加点击事件,以及点击效果
- 在UIView中添加点击事件
- ios UIView 遮挡子控件点击事件