记录iOS应用程序中的每个按钮按下/交互

Chr*_*ian 11 logging usability-testing ios

有没有办法捕获各种用户交互,但首先在iOS应用程序中按下按钮?我有兴趣用时间戳记录这些事件,理想情况下是它们出现的屏幕名称.

我想最简单的方法是在按钮调用的每个动作中插入一个自定义日志函数调用.但这太费劲了.

我还考虑过子类化UIButton,但这仍然需要我更改现有应用程序中的每个按钮,并且只能用于按钮(例如,不是表格中的单元格).

有什么意义我可以拦截一般的触摸吗?或者有一点,我特别知道按下了一个按钮,我有一个对该按钮的引用?

(我们研究移动应用程序的可用性测试,因此我们的目标是一个模块化的解决方案,可以轻松地重复使用,并且需要尽可能少的手动更改代码.但是任何建议都是受欢迎的,因为我意识到这可能不那么容易.)

Lom*_*baX 13

您可以继承UIApplication:

  • 创建UIApplication子类
  • 覆盖-(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event方法,记得调用超级实现
  • NSLog在实现中放入一个或其他诊断代码

例如,每次按下UIButton时都会打印一个日志:

-(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event
{
    if ([sender isKindOfClass:[UIButton class]])
    {
        NSLog(@"Action: %@ - %@ - %@", NSStringFromSelector(action), target, sender);
    }

    return [super sendAction:action to:target from:sender forEvent:event];
}


2013-07-08 14:46:18.270 UIApplicationSubclass[94764:c07] Action: anAction: - <ViewController: 0x76790a0> - <UIRoundedRectButton: 0x767b9b0; frame = (103 66; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x767bad0>>
2013-07-08 14:46:27.378 UIApplicationSubclass[94764:c07] Action: anAction: - <ViewController: 0x76790a0> - <UIRoundedRectButton: 0x767b9b0; frame = (103 66; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x767bad0>>
Run Code Online (Sandbox Code Playgroud)

而且,要继承UIApplication,你必须像这样更改main.m文件(在我的例子中,UIApplication子类被命名为FLApplication,查看UIApplicationMain函数的第三个参数和FLApplication.h的导入)

#import "AppDelegate.h"
#import "FLApplication.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, NSStringFromClass([FLApplication class]), NSStringFromClass([AppDelegate class]));
    }
}
Run Code Online (Sandbox Code Playgroud)