UIButton 防止多按钮同时按下

转载自:http://kevin-wu.net/ios-tips-rare-operation-test-methods/
上次在开发一个iOS应用的时候,项目招了一个非常专业的iOS应用测试团队。
这个测试团队极度专业,他们能通过各种手法测试出一些非常罕见的操作上的Bug。
我们称之为Rare Operation Bug。

简单总结一下他们常用的操作测试手法:

同时按下多个显示在界面上的按钮,然后同时放开所有手指。
这时候屏幕会经常出现一些意想不到的结果。
要解决这样的Bug,只要界面对按钮没有特殊的同时按下的需求,就只需要
将Button设置为排他的就行了。
UIButton *testBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 70, 300,36)];
[testBtn setExclusiveTouch:YES];
在进行一些需要一定处理时间的操作时,或者在应用里出现Popup对话框的瞬间,
按下电源按钮或者Home按钮。然后再打开应用程序时,有时候会出现意想不到的结果。
对于Popup对话框,iOS4.X和iOS5.X有不同的处理方法。如果在恢复应用程序时,
Popup对话框出现异常,或者连续弹出几次,一般只要在show对话框的时候,延迟一下就行了。
比如在ViewController里:

[self showIndicator];
[self performSelector:@selector(showMyAlertView)
withObject:nil
afterDelay:0.1f];
在按下电源键或者Home键时,如果应用程序正在处理一些操作,那么记得在应用程序的AppDelegate里边的
以下的几个方法里进行相应的操作,因为应用程序不一定能够再回到原来的状态。
(比如系统内存不足时,你的应用程序所占用的内存也许会被操作系统释放)

  • (void)applicationWillResignActive:(UIApplication *)application {
    }
  • (void)applicationDidEnterBackground:(UIApplication *)application {
    }
    长时间按着界面上的一个按钮,直到在其他的动画或者新的View将原来的按钮覆盖时,
    将手松开。如果按钮用的是UIControlEventTouchUpInside,那么很多意想不到的
    事情就会发生。
    要应对这样的Bug,需要在新的View或者动画将原来的Button盖住时,将这个Button
    的Touch事件取消掉。例如,你可以通过以下的代码,将该View上的所有subviews的Touch事件取消。

//例如在一个ViewController里
for (UIView *aView in [self.view subviews]) {
[aView touchesCancelled:nil withEvent:nil];
}
在操作一个Table时,先用一个手指按住一个cell,然后再用其他的手指
按照不同顺序随意点击其他的cell,再松开一开始按着的手指。这时候
也会出现一些意想不到的结果。(特别是一个界面上拥有复数个Table的时候)
解决这样的问题,要根据具体情况进行具体分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值