iOS小技巧:用runtime 解决UIButton 重复点击问题

转载 2015年11月18日 10:43:15

我们可以给按钮添加一个属性重复点击间隔, 通过设置这个属性来控制再次接受点击事件的时间间隔.

@interface UIControl (XY)@property (nonatomic, assign) NSTimeInterval uxy_acceptEventInterval;   // 可以用这个给重复点击加间隔@endstatic const char *UIControl_acceptEventInterval = "UIControl_acceptEventInterval";- (NSTimeInterval)uxy_acceptEventInterval{    return [objc_getAssociatedObject(self, UIControl_acceptEventInterval) doubleValue];}- (void)setUxy_acceptEventInterval:(NSTimeInterval)uxy_acceptEventInterval{    objc_setAssociatedObject(self, UIControl_acceptEventInterval, @(uxy_acceptEventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC);} 

在app启动的时候,我们hook 所有的按钮的 event

@implementation UIControl (XY)+ (void)load{    Method a = class_getInstanceMethod(self, @selector(sendAction:to:forEvent:));    Method b = class_getInstanceMethod(self, @selector(__uxy_sendAction:to:forEvent:));    method_exchangeImplementations(a, b);}@end 

在我们的点击事件里呢,对点击事件做下过滤

- (void)__uxy_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event{    if (self.uxy_ignoreEvent) return;    if (self.uxy_acceptEventInterval > 0)    {        self.uxy_ignoreEvent = YES;        [self performSelector:@selector(setUxy_ignoreEvent:) withObject:@(NO) afterDelay:self.uxy_acceptEventInterval];    }    [self __uxy_sendAction:action to:target forEvent:event];}


实际使用起来就是这个样子

 UIButton *tempBtn = [UIButton buttonWithType:UIButtonTypeCustom];    [tempBtn addTarget:self action:@selector(clickWithInterval:) forControlEvents:UIControlEventTouchUpInside];    tempBtn.uxy_acceptEventInterval = 0.5; 

文章至此就结束了.虽然不推荐大范围用runtime, 但是小范围内使用还是可以解决不少小问题的.



iOS小技巧--用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题什么是这个问题我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决我们通常...
  • uxyheaven
  • uxyheaven
  • 2015年08月26日 20:05
  • 13776

iOS开发- 利用runtime拦截UIButton的点击事件,防止重复点击

应用场景:对于公司原来的一些代码,想对UIButton的点击事件做一部分修改,但是如果使用继承出来的UIBtton来解决的话, 又要改大量的代码,这时候,使用runtime拦截替换发送点击事件的方法可...
  • wqt925497045
  • wqt925497045
  • 2016年07月02日 18:52
  • 1160

iOS---防止UIButton重复点击的三种实现方式

通常, 我们会采用如下的一些措施来防止重复点击UIButton:使用UIButton的enabled或userInteractionEnabled使用UIButton的enabled属性, 在点击后,...
  • icetime17
  • icetime17
  • 2016年06月29日 14:39
  • 5321

iOS小技巧--用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题.  通常是如何...
  • yuanchunzi
  • yuanchunzi
  • 2015年09月11日 16:37
  • 417

iOS小技巧–用runtime 解决UIButton 重复点击问题

什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等...
  • zhaojian3513012
  • zhaojian3513012
  • 2016年01月19日 16:15
  • 332

iOS之使用Runtime解决UIButton多次点击(重复点击)

在实际开发中我们,点击一个button按键时,需要触发一个事件去执行。用户在正常操作情况下,单次点击时,button只会响应一次点击。但是如果用户多次点击一个button,那么就会引起这个事件被多次执...
  • wzc10101415
  • wzc10101415
  • 2016年08月10日 13:35
  • 816

用Runtime解决UIButton重复点击问题

用Runtime解决UIButton重复点击问题        通常我们在项目中会遇到这样的问题,点击一个button触发一个事件,但总是会遇到连点的问题,如果是动画,连点会让你的动...
  • hypercode
  • hypercode
  • 2016年08月30日 16:12
  • 437

用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题
  • wsjshx
  • wsjshx
  • 2016年01月07日 21:59
  • 396

iOS- 利用runtime,解决多次点击相同button,导致重复跳转的问题

作者:ocarol 原文链接:http://www.jianshu.com/p/65ce6471cd0f 场景 当app有点卡的时候,多次点击相同的but...
  • xiaohe901216
  • xiaohe901216
  • 2016年08月30日 11:07
  • 598

iOS开发--利用 runtime,解决多次点击相同 button,导致重复跳转的问题

场景 当app有点卡的时候,多次点击相同的button,经常出现,跳转了N次相同的界面(比如闲鱼) 解决办法 用运行时和分类,替换 UIControl 响应事件,根据响应的间隔时间来判断是否执行...
  • zzzzzdddddxxxxx
  • zzzzzdddddxxxxx
  • 2016年11月23日 15:15
  • 254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS小技巧:用runtime 解决UIButton 重复点击问题
举报原因:
原因补充:

(最多只允许输入30个字)