2013-07-01 14 views
9

Czy istnieje sposób na przechwytywanie wszelkiego rodzaju interakcji użytkownika, ale przede wszystkim naciskanie przycisku w aplikacji na iOS? Interesuje mnie rejestrowanie tych zdarzeń za pomocą znacznika czasu, a najlepiej z nazwą ekranu, na którym się pojawiają.Zapisywanie każdego naciśnięcia przycisku/interakcji w aplikacji iOS

Domyślam się, że najprościej jest wstawić wywołanie niestandardowej funkcji dziennika do każdej akcji wywołanej przez przycisk. Ale to za dużo wysiłku.

Pomyślałem także o podklasowaniu UIButton, ale wymagałoby to ode mnie zmiany każdego przycisku w istniejącej aplikacji i działałoby tylko dla przycisków (nie na przykład komórek w tabeli).

Czy jest jakiś punkt, w którym mogę przechwycić dotyk w ogóle? A może chodziło o to, że wiedziałem, że został naciśnięty przycisk i mam odnośnik do tego przycisku?

(Badamy testowanie użyteczności aplikacji mobilnych, dlatego dążymy do rozwiązania modułowego, które może być łatwo ponownie wykorzystane i wymaga jak najmniejszych ręcznych zmian kodu, ale wszelkie sugestie są mile widziane, ponieważ zdaję sobie sprawę, że tak nie jest łatwe.)

+1

to jest tak łatwe, jeśli podklasy UIApplication, spójrz na moją odpowiedź ;-) – LombaX

Odpowiedz

12

Można podklasy UIApplication:

  • Załóż UIApplication podklasa
  • zastąpić metodę -(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event, pamiętaj, aby zadzwonić Super realizacji ma
  • położyć NSLog lub inny kod diagnostyczny wewnątrz realizacji

Przykład: spowoduje to wydrukowanie dziennika za każdym naciśnięciem przycisku UIBUT:

-(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>> 

Ponadto podklasy UIApplication, trzeba zmienić plik main.m jak to (w moim przypadku podklasa UIApplication nazwano FLApplication, spojrzeć na trzeci parametr funkcji UIApplicationMain i importu 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])); 
    } 
} 
+0

Doskonały pomysł, dziękuję – Stavash

1

To, czego dokładnie potrzebujesz, to Google Analytics. Rejestrowanie każdej interakcji użytkownika nie jest właściwą metodą. Możesz użyć Google Analytics do śledzenia interakcji użytkownika w Twojej aplikacji.

+0

Właściwie myślę, że tak nie jest. Chcę przeprowadzić badania, które wymagają surowych danych, a nie wersji zagregowanej. Chcę kontrolować, co jest rejestrowane i jak jest analizowane. Potrzebuję oddzielnego zestawu danych dla każdego użytkownika, dla którego przeprowadziłem test i dokładne znaczniki czasu, aby połączyć je z innymi informacjami (zrzutami ekranu/nagraniami). – Christian

Powiązane problemy