一、如何避免button的多次点击问题?
方案逻辑总结:
1)在每次点击时先取消之前的操作(解决了疯狂点击的操作,意思就是让button延迟执行,如果你疯狂点击,没有到时间,上一次的点击就被取消掉了)http://blog.youkuaiyun.com/fengsh998/article/details/11112885
- (void)buttonClicked:(id)sender
{
//这里是关键,点击按钮后先取消之前的操作,再进行需要进行的操作
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(buttonClicked:) object:sender];
[self performSelector:@selector(buttonClicked: )withObject:sender afterDelay:0.2f];
}
2)点击后将按钮置为不可点击状态,几秒后恢复(或者请求失败后恢复,不可在成功的时候恢复,因为这种情况还是会push出多个控制器,效果不行,只能在viewwillAppear里面写一个方式让button恢复点击状态)
-(void)buttonClicked:(id)sender{
self.button.enabled = NO;
[self performSelector:@selector(changeButtonStatus) withObject:nil afterDelay:1.0f];//防止用户重复点击
}
-(void)changeButtonStatus{
self.button.enabled = YES;
}
3)防止push操作进入多个控制器
如果你的Navigation是自定义的,可以重写-
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated方法,在此方法中做处理,代码如下:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (![[super topViewController] isKindOfClass:[viewController class]]) { // 如果和上一个控制器一样,隔绝此操作
[super pushViewController:viewController animated:animated];
}
}
此中方法可以防止多次重复push,但如果你想push的下一个控制器恰好和上一个控制器类型(Class)一样,就不会push成功。所以并不推荐使用此方法。
4)使用Runtime监听点击事件,忽略重复点击,设置一个事件时间间隔eventTimeInterval属性,使其规定时间内只响应一次点击时间(原理同第二种方式,只是更加灵活的实现)http://www.cnblogs.com/wanxudong/p/5984941.html
二、如何避免屏幕内多个button被同时点击
1、在AppDelegate中添加 [[UIButton appearance] setExclusiveTouch:YES];
2、或者每新建button都设置button.exclusiveTouch = YES;