一个分类解决按钮的点击区域与重复点击问题!

iOS中,要改变响应区域,首相想到的是响应者链条,然后就想到 

- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;

这个方法,在这里判断按钮是否可以响应。所以要重写该方法。

简单的办法是在这里,给个响应的固定数值,比如上下左右全是20,生成一个新的rect,在判断这个point是否在这个rect内。

返回 CGRectContainsPoint(rect, point) ? self : nil; 也可以解决问题,可是有时候这个数值不是很固定,所以最好还是把这个数值设置成一个可变的数值。

1. 首先通过关联对象的办法来实现记录按钮的响应区域变化

一个分类解决按钮的点击区域与重复点击问题!_第1张图片

2. 通过设置的新边距,来重新计算新的响应区域

一个分类解决按钮的点击区域与重复点击问题!_第2张图片

3. 重写响应者方法。

一个分类解决按钮的点击区域与重复点击问题!_第3张图片

到这里,响应区域已经解决了。

下面开始设置重复点击的问题,简单的想法是在点击按钮方法的时候,把这个按钮设置成不可用,或者是设置一个布尔值,来控制方法的执行。

把这个方法写在分类里,可以做到一劳永逸的效果。

首先是准备工作

一个分类解决按钮的点击区域与重复点击问题!_第4张图片

然后是设置一个新的添加事件的方法


在响应方法中设置一个属性来决定是否跳过执行方法

一个分类解决按钮的点击区域与重复点击问题!_第5张图片

到此防重复点击的处理也做好了。

github地址

你可能感兴趣的:(一个分类解决按钮的点击区域与重复点击问题!)