美文网首页
按钮添加方法触发多次

按钮添加方法触发多次

作者: Miss_QL | 来源:发表于2018-02-26 15:04 被阅读134次

一、RAC添加方法触发多次
1、问题的描述
表格的cell上添加了按钮,这个按钮添加方法用的是ReactiveCocoa(以下简称RAC)的方法rac_signalForControlEvents,结果点击按钮的时候容易发生多次触发事件的问题。

2、问题的分析
我们知道cell在移出屏幕时,并没有被销毁,而是被放入重用池中,只有当我们在重用池中取不到的时候才会再创建新的cell。而我们在进入重用池之前,已经添加了按钮的事件方法:[[cell.btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {}];
而我们取出来的cell有很大的可能性是重用池中的,取出来之后又对其进行上述的rac_signalForControlEvents操作,导致每次重用都会添加一个事件,所以当我们点击按钮时,就会多次触发事件。

3、问题的解决
通过对问题的分析,我们知道只要当每次从重用池中取出cell的时候,终止其按钮之前的事件即可。RAC的操作是基于信号signal的,我们可以使用takeUntil:someSignal来终止cell上按钮之前的signal。takeUntil:someSignal的作用是当someSignal sendNext时,当前的signal就sendCompleted。someSignal就像一个拳击裁判,哨声响起就意味着比赛终止:

 [[[cell.btn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:cell.rac_prepareForReuseSignal]subscribeNext:^(idx) {
    // 在此添加按钮的事件
 }];

这样就不会多次调用了。


二、防止按钮快速点击造成多次响应
1、问题的描述
通常有些操作是防止用户在一次响应结束中再响应下一个,但有些测试用户就要猛的狂点,像这种恶意的操作,我们要进行预防。

2、问题的解决
当然有些异步操作时,可以在调用前enable 掉。等CallBack 后再enable起来。在这个过程中,按钮是不能点击的。

- (void)todoSomething:(id)sender {
    // 在这里做按钮的想做的事情。
}
 
- (void)starButtonClicked:(id)sender {
    // 先将未到时间执行前的任务取消。
    [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:sender];
    [self performSelector:@selector(todoSomething:) withObject:sender afterDelay:0.2f];
}

对于这种方法,快速点击N次,只要每次间隔在0.2秒内的都不响应操作,等到停下点击到达0.2秒后再执行。所以按照自己的需要设置响应时间,狂点吧、只响应一次。

相关文章

  • 按钮添加方法触发多次

    一、RAC添加方法触发多次1、问题的描述表格的cell上添加了按钮,这个按钮添加方法用的是ReactiveCoco...

  • Ajax避免重复提交

    为防止用户在短时间内多次点击按钮触发提交方法,在ajax方法触发的前面加入下面两行代码(id名改为自己定义的按钮的):

  • ios答辩

    点击如下搜索按钮 进入该页面前 会首先触发该方法 点击搜索会进入该方法(添加逻辑) 滑动删除触发该方法(删除逻辑)...

  • 二、使用runtime实现防止按钮重复点击

    快速点击按钮,button响应方法可能触发多次。如果button的响应方法涉及到跳转的话,那么就会跳转多次。涉及到...

  • flutter 禁止连续点击按钮的封装

    在开发中按钮如果被多次点击,会触发多次事件,想要封装一个按钮能够在短时间内禁止多次点击。 思路 使用延时方法 改变...

  • LayUI使用技巧

    1.当在折叠面板上添加了按钮,点击按钮时折叠面板冒泡事件也会触发,随之打开收起。 解决方法:在按钮的点击事件中添加...

  • 小程序登录

    登录界面 设计图如下 布局 布局上只需要添加“进入答题”按钮即可,按钮添加触发方法 微信新的规定,无法直接从JS中...

  • JavaScript 点击事件 - 一个按钮触发另一个按钮

    给按钮 2 添加点击事件 click 触发按钮 1 的点击事件,就算给按钮 1 添加样式 display: non...

  • Android 自定义Toast实现多次触发只会显示一次toas

    使用场景描述 当我们处于某个场景,例如一个按钮可以触发toast的显示,当你在多次点击按钮时,会多次触发toast...

  • 按钮点击问题UIControlEventTouchUpInsid

    问题描述:项目中使用了自定义的cell,cell上添加有按钮,按钮的点击方法触发的方式设置的是UIControlE...

网友评论

      本文标题:按钮添加方法触发多次

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