ios技巧-否定网上千变一律的说法——按钮重复点击事件,并提出解决方式

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

网上千遍一律都是这样写的,我不知道笔者这样写的时候,有没有全方位的去验证这个问题

-(void)buttonClicked:(id)sender{
    sender.enabled = NO;
  //防止用户重复点击
  [self performSelector:@selector(changeButtonStatus:) withObject:nil afterDelay:0.1f];
}
-(void)changeButtonStatus:(id)sender{
    sender.enabled = YES;
//做其他业务逻辑需要的操作
}
对于上面做法我是否定的,网络好的情况下这个问题没有发现问题。如果在网络不好的情况下,问题是存在的,并已经验证是存在问题,如果点击按钮的下一步是push到下级页面,就会导致push好几下。

下面给出具体解决措施,并验证过

1.首先定义一个BOOL属性来记录状态,并初始值设置为YES
@property(nonatomic,assign)BOOL cancelClicked;
- (void)viewDidLoad {
    [super viewDidLoad];
    _cancelClicked = YES;
}
2.其次在按钮的点击方法里面将其设为NO
- (void)btnOnClick{
    if (_cancelClicked) {
        _cancelClicked = NO;
        [self commitOrderOnClick];
    }
}

3.最后网络请求完毕过后,不论成功失败,都要将其状态值设为YES;
- (void)commitOrderOnClick{
  
    [HTTPRequest POST:kConfirmUrl parameter:params success:^(id resposeObject) {
        _cancelClicked = YES;
        if (SUCCESS) {
}
    } failure:^(NSError *error) {
        _cancelClicked = YES;
    }];
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,854评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,975评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,196评论 4 61
  • 你不懂生命 我也不理解梦 所以梦比作成人生 你的人生进入我的梦 像炊烟进入风 摇晃不定却丝毫不差 你活在过去 所以...
    凌谷阅读 293评论 0 0
  • 人们常说,人生很复杂,总有太多纷繁杂乱的关系需要处理。 其实仔细想想,也不太杂乱,归纳起来大至为三情况,就像几何学...
    和尘云阅读 730评论 0 2