zoukankan      html  css  js  c++  java
  • UIButton重复点击,重复触发,怎么办



    UIButton重复点击,重复触发,针对这些暴力调试,不能让方法无限制的触发。

    我寻找了很多人的解决方案, 把一些常用的介绍出来 .

    1.设开关. (定时)
    请求是异步操作时,可以在调用前enable关闭。等DidFinished后再enable打开。所以过程中按钮是不能点的。
    当然也可以控制UIbutton自带的select属性,范例如下:

    - (void) btnDone:(UIButton*)btn
    {
       if(btn.selected) return;
       btn.selected = YES;
       [self performSelector:@selector(doSth) withObject:nil afterDelay:0.5]; //使用延时进行限制。
      //to do something.
    }
    
    - (void)doSth
    {
       UIButton *btn=(UIButton*)[self.view viewWithTag:33];
       btn.selected=NO; 
      [timer invalidate];
       timer=nil; 
    }

    2.NSDelayedPerforming

    /****************  Delayed perform  ******************/
    @interface NSObject (NSDelayedPerforming)
    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray<NSString *> *)modes;
    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
    @end

    查看文档, 使用cancelPreviousPerformRequestsWithTarget方法 .范例如下:

    - (void)myButtonClicked:(id)sender
    {
       //取消此方法
       [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSth:) object:sender];
        [self performSelector:@selector(doSth:) withObject:sender afterDelay:0.5f];
    }
    
    - (void)doSth:(id)sender
    {
        //do something ...
    }

    这种方法我推荐

  • 相关阅读:
    关于IE缓存的解决方案(HTML,JSP,ASP,PHP,C#)(转)
    ASP.NET 2.0 中的客户端脚本
    Post和Get的区别(兼谈页面间传值的方式)(转)
    委托的小例子
    JS的正则表达式
    HTTP消息头
    asp.net一个onclick的全过程(简单写一下)
    location.reload() 和 location.replace()的区别和应用
    使用 .NET Framework 2.0 在您的应用程序中支持证书(转)
    页面动态注册脚本(小技巧)
  • 原文地址:https://www.cnblogs.com/YH-Coding/p/5327623.html
Copyright © 2011-2022 走看看