美文网首页
按钮防多点全局更改

按钮防多点全局更改

作者: lvzhehappy | 来源:发表于2017-04-10 13:49 被阅读15次

解决思路:创建一个UIButton分类,运用runtime机制修改sendAction:to:forEvent:方法

@interface UIButton (AvoidMutiTouch)

@property (nonatomic, assign) NSTimeInterval uxy_acceptEventTime;

@property (nonatomic,assign) BOOL uxy_ignoreEvent;//是否可以多点

@end

#define  kUxy_acceptEventInterval 1 //在多少时间范围内可接受下次点击

@implementation UIButton (AvoidMutiTouch)

static const char *UIControl_acceptedEventTime = "UIControl_acceptedEventTime";

static const char *UIControl_ignoreEvent = "UIControl_ignoreEvent";

- (NSTimeInterval)uxy_acceptEventTime

{

return [objc_getAssociatedObject(self, UIControl_acceptedEventTime) doubleValue];

}

- (void)setUxy_acceptEventTime:(NSTimeInterval)uxy_acceptEventTime

{

objc_setAssociatedObject(self, UIControl_acceptedEventTime, @(uxy_acceptEventTime), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

- (BOOL)uxy_ignoreEvent

{

return [objc_getAssociatedObject(self, UIControl_ignoreEvent) boolValue];

}

- (void)setUxy_ignoreEvent:(BOOL)uxy_ignoreEvent

{

objc_setAssociatedObject(self, UIControl_ignoreEvent, @(uxy_ignoreEvent), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

+ (void)load

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

SEL selA = @selector(sendAction:to:forEvent:);

SEL selB = @selector(uxySendAction:to:forEvent:);

Method methodA =  class_getInstanceMethod(self,selA);

Method methodB = class_getInstanceMethod(self, selB);

BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB));

if (isAdd) {

class_replaceMethod(self, selB, method_getImplementation(methodA), method_getTypeEncoding(methodA));

}else{

method_exchangeImplementations(methodA, methodB);

}

});

}

- (void)uxySendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event

{

if ([NSStringFromClass(self.class) isEqualToString:@"UIButton"]) {

if(self.uxy_ignoreEvent){

[self uxySendAction:action to:target forEvent:event];

return;

}

if ([NSDate date].timeIntervalSince1970 - self.uxy_acceptEventTime < kUxy_acceptEventInterval) {

return;

}

if (kUxy_acceptEventInterval > 0) {

self.uxy_acceptEventTime = [NSDate date].timeIntervalSince1970;

}

}

[self uxySendAction:action to:target forEvent:event];

}

@end

相关文章

  • 按钮防多点全局更改

    解决思路:创建一个UIButton分类,运用runtime机制修改sendAction:to:forEvent:方...

  • Dev button 按钮更改颜色

    /// /// 按钮更改颜色 /// /// 颜色 /// 按钮 ...

  • iOS - 添加一个全局悬浮按钮

    iOS - 添加一个全局悬浮按钮 iOS - 添加一个全局悬浮按钮

  • iOS 导航栏-返回按钮-自定义

    在开发过程中,我们经常遇到使用系统导航栏的功能,如何更改返回按钮的样式呢? 一、更改返回按钮图片 二、重写返回按钮...

  • Button enabled和userInteractionEn

    userInteractionEnabled不改变按钮状态,仅仅使得按钮不能被点击enabled更改会改变按钮状态...

  • vscode

    合并冲突在>>>>>>>>>>HEAD 有悬浮按钮:'采用当前更改','采用传入的更改','保留双方更改','比较...

  • iOS更改状态栏颜色(swift4)

    一、全局更改状态栏颜色 以全局更改状态栏浅色风格为例 1、info.plist 中添加View controlle...

  • 按钮禁止多点触控

    在做项目过程中,发现多点触控屏幕,按钮触发点击事件会出Bug。然后去网上查了下,禁止按钮多点触控只需要设置:

  • unity—卡牌翻转效果

    1、添加一个按钮,将图像更改为卡牌初始显示图像。 2、右键--UI--image,并将其拖动到按钮的子集,更改图像...

  • UITextField 的简单用法

    补充:更改UITextField右边按钮的图片 MBTextField 继承 UITextField

网友评论

      本文标题:按钮防多点全局更改

      本文链接:https://www.haomeiwen.com/subject/lmusattx.html