• iOS之防止用户重复点击Button(按钮)问题


    在项目中,我们往往会遇到这样的问题:因为网络较慢的原因,用户会不耐烦的一直去点击按钮,这样导致的结果时:相关代码一遍一遍的被重复执行,如果按钮的事件是网络请求的话,这样又导致一种网络请求的循环。所以我们解决的方法是在执行按钮点击事件时,为Button加上防止重复点击的方法。

    具体的有以下几种方法:

    1、使用performSelector方法

    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

    我们在点击事件中添加延迟执行事件,在延迟的这个期间,该按钮的enabled设置为NO,即不能点击。过了延迟时间后再设置为YES。以这种方式防止用户重复点击按钮。

    代码如下:

    -(void)buttonClicked:(id)sender

    {

        sender.enabled = NO;

      //防止用户重复点击

      [self performSelector:@selector(changeButtonStatus:) withObject:nil afterDelay:1.0f];

    }

    -(void)changeButtonStatus:(id)sender

    {

        sender.enabled = YES;

    }

     

     

    以上的方法可以很好的解决我们重复点击按钮的问题,但更推荐的却是下面的这种方法:

    2、使用cancelPreviousPerformRequestsWithTarget 和  performSelector 结合的方法(推荐使用

     

    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

     

     

    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

     

     

    原理是:我们每次点击按钮时,先执行取消之前的按钮点击执行事件,然后再去执行一个延迟执行方法(方法中执行的是按钮执行的事件)。代码如下:

    - (void)buttonClicked:(id)sender

    {

        //在这里做按钮的想做的事情。

    }

    - (void)starButtonClicked:(id)sender

    {

        //先将未到时间执行前的任务取消。

        [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(buttonClicked:)object:sender];

        

        [self performSelector:@selector(buttonClicked:)withObject:sender afterDelay:0.2f];

    }

     

    第二种是我们比较推荐的方法,但这两种方法都可以解决按钮被重复点击的问题。

      

  • 相关阅读:
    C# 制作卸载文件
    【转】C#窗体飞入飞出的动画效果(Api)
    C# 给picturebox添加滚动条
    js中的各种获取日期
    Java与.NET 的Web Services相互调用
    android源码、博文2
    仿网易新闻app下拉标签选择菜单
    安卓巴士android源码、博文精选1
    android源码 分享1
    优秀源码分享
  • 原文地址:https://www.cnblogs.com/LQCQ-Silent/p/6082086.html
Copyright © 2020-2023  润新知