现在的位置: 首页 > 综合 > 正文

UIButton 防止多按钮同时按下

2013年03月08日 ⁄ 综合 ⁄ 共 1394字 ⁄ 字号 评论关闭

转载自:http://kevin-wu.net/ios-tips-rare-operation-test-methods/

上次在开发一个iOS应用的时候,项目招了一个非常专业的iOS应用测试团队。
这个测试团队极度专业,他们能通过各种手法测试出一些非常罕见的操作上的Bug。
我们称之为Rare Operation Bug。

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

  1. 同时按下多个显示在界面上的按钮,然后同时放开所有手指。
    这时候屏幕会经常出现一些意想不到的结果。
    要解决这样的Bug,只要界面对按钮没有特殊的同时按下的需求,就只需要
    将Button设置为排他的就行了。

    UIButton *testBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 70, 300,36)];
    [testBtn setExclusiveTouch:YES];
  2. 在进行一些需要一定处理时间的操作时,或者在应用里出现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 {
    }
  3. 长时间按着界面上的一个按钮,直到在其他的动画或者新的View将原来的按钮覆盖时,
    将手松开。如果按钮用的是UIControlEventTouchUpInside,那么很多意想不到的
    事情就会发生。

    要应对这样的Bug,需要在新的View或者动画将原来的Button盖住时,将这个Button
    的Touch事件取消掉。例如,你可以通过以下的代码,将该View上的所有subviews的Touch事件取消。

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

还有其他很多测试手法,以后慢慢补充。

抱歉!评论已关闭.