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

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

具体的有以下几种方法:

1、使用performSelector方法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #bdb2a0 }
span.s1 { }
span.s2 { color: #c66576 }
span.s3 { color: #3fa7ad }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #bdb2a0 }
span.s1 { }
span.s2 { color: #c66576 }
span.s3 { color: #3fa7ad }

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

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

代码如下:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #bdb2a0 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px "PingFang SC"; color: #7d7e7e }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #76c2ff }
span.s1 { }
span.s2 { color: #c66576 }
span.s3 { font: 17.0px Menlo; color: #bdb2a0 }
span.s4 { font: 17.0px Menlo }
span.s5 { color: #bdb2a0 }
span.s6 { color: #8b87ff }

-(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 结合的方法(推荐使用

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #bdb2a0 }
span.s1 { }
span.s2 { color: #c66576 }

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

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

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #bdb2a0 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px "PingFang SC"; color: #7d7e7e }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #76c2ff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: #bdb2a0; min-height: 20.0px }
span.s1 { }
span.s2 { color: #c66576 }
span.s3 { font: 17.0px Menlo; color: #bdb2a0 }
span.s4 { font: 17.0px Menlo }
span.s5 { color: #bdb2a0 }
span.s6 { color: #8b87ff }

- (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];

}

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }

时间: 2024-12-23 09:37:51

iOS之防止用户重复点击Button(按钮)问题的相关文章

asp.net中如何防止用户重复点击提交按钮

asp.net中如何防止用户重复点击提交按钮 asp.net 中防止因为网速慢等影响交互的问题导致用户可能点击多次提交按钮,从而导致数据库中出现多条重复的记录,经过亲自验证在网上找的方法,找到两个切实可行的方法:第一种方法1.页面前台按钮: <asp:Button ID="btnSumbit" runat="server" Text="提交" onclick="btnSumbit_Click" /> 在后台Page

iOS开发项目篇—14点击标题按钮弹出菜单

iOS开发项目篇—14点击标题按钮弹出菜单 一.简单说明 (1)简单实现 点击标题按钮弹框,在箭头向上的时候,显示标题菜单 把ImageView添加到谁的身上?三角形的箭头在导航栏上,因此不能添加到tableview上. 分析图示: 有两个两种方法可以考虑: (1)添加到导航控制器上,因为导航栏是在导航控制器上的. (2)不用考虑控制器,直接添加到窗口上. 拿到窗口 (1)self.view.window这个属性谨慎使用,当开始加载的时候,为空 (2)获取主窗口  [UIApplication

vue中,点击button按钮后,页面上的input框自动聚焦

需求:点击button按钮,录入成功后,页面上的input框自动聚焦,快速进行下一次录入,提高效率 开始尝试了几种方法都没有成功 一.首先想到的用vue指令 v-focus,然而没有成功 <Input v-model="book.isbnOrIssn" @change.native="_getIsbn" @blur="_getIsbn" :disabled="snDisabled" v-focus placeholder

js点击button按钮跳转到页面代码

www.111cn.net 编辑:smoke 来源:转载 在网页中button按钮不具备a标签的属性了,如果我们要给button 按钮增加跳转事件我们可以在它的确onclick事件上点击跳转js来实现,下面我来给大家介绍一些常用的方法. 点击按钮怎么跳转到另外一个页面呢?我们在网站制作中可能是需要的,因为有时我们需要做这样的效果,尤其是将按钮做成一个图片,而点击图片要跳转到新的页面时,怎么做到呢? 这样的效果可以:onclick="window.location=’新页面’" 来实现.

C++ windows图形界面,点击Button按钮通过openFileDialog控件选择文件

一直没用C++写过图形界面,之前用C#写很简单啊,没想到今天用C++还是有点不爽! 第一个问题,就是点击一个按钮button,选择文件,非文件夹,是文件,就是图片之类的东西! 首先,可以在界面中拖一个openFileDialog控件,控件名字就叫openFileDialog1,如图所示 也可以在Button的点击事件里new一个openFileDialog控件也可以! 然后,就是在button点击事件里,写下相应的代码就可以了: private: System::Void button1_Cli

点击button按钮后界面不自动刷新

问题: 我使用的button标签,在 标签中没有使用ruant=“server”的属性,但是在点击button时,界面还是会刷新 解决方式: 由于界面中含有form标签,而button标签的默认type是submit.所以相当于进行了form提交操作.为了是界面不刷新只需要在botton标签中加入type=“button”即可.

问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置

asp.net点击一个按钮,使页面跳转到本面页上的指定位置 (2011-04-19 16:46:51) 转载▼ 标签: it   最近在做一个项目. 用到标题所说的功能. 实现方法: 1.在aspx中添加一个javascript: <script language="javascript" type="text/javascript">         <!-- function autoclick()         {            

验证码防止用户重复点击

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title></head><body>        手机号:<input type="text" name='cell'>        <button>获取验

js点击事件防止用户重复点击执行

点击事件里给button标签加一个自定义属性,存上次点击时间 追问: 求详细代码,JS 真心的没怎么做过 追答: <input type="button" id="submit" value="提交"> <script> $(document).ready(function(){     $("#submit").click(function(){       var nowTime = new Dat