2009-10-26 4 views
1

J'ai créé une application iPhone très basique avec une application File/New Projet/View. Aucun fichier NIB présent.Nouveau sur iPhone SDK: touchesBegan pas appelé

Voici mon appDelegate

.h

@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    MyViewController *viewController; 
} 

.m

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch  
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 
} 

Et voici ma méthode loadview dans mon contrôleur

- (void)loadView { 
CGRect mainFrame = [[UIScreen mainScreen] applicationFrame]; 
UIView *contentView = [[UIView alloc] initWithFrame:mainFrame]; 
contentView.backgroundColor = [UIColor redColor]; 
self.view = contentView; 
[contentView release]; 
} 

Maintenant, pour attraper le tou événement chesBegan, j'ai créé une nouvelle sous-classe de UIView:

.h

@interface TouchView : UIView { 
} 

.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
NSLog(@"Touch detected"); 

} 

et modifié la deuxième ligne dans mon loadview en ceci:

TouchView *contentView = [[UIView alloc] initWithFrame:mainFrame]; 

Pourquoi touchesBegan n'a jamais été appelé?

Répondre

0

trouvé la solution: touchesBegan est appelée sur le viewController, pas sur la vue ...

+5

Très proche. Apparemment, le UIViewController reçoit les messages touchesBegan/touchesEnded/etc * avant * l'UIView. Le UIViewController ne transmet pas le message à UIView (en appelant [super touchesBegan]) par défaut. Vous devez donc vous déplacer ou avancer vers les touches * fonctions * si * votre UIView a un contrôleur. C'est déroutant et jamais documenté correctement, mais c'est la façon traditionnelle du cacao. – Dave

+0

c'est absolu mauvais copain ... il est aussi appelé classe UIView .. http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIResponder_Class/Reference/Reference.html#//apple_ref/ occ/instm/UIResponder/touchesMoved: avecEvent: – harshitgupta

3

Si vous modifiez le loadview dans ce:

TouchView *contentView = [[TouchView alloc] initWithFrame:mainFrame]; 

Vous devriez avoir aucun problème attraper la touche dans TouchView. Dans votre code, vous n'avez pas créé d'instance TouchView, vous avez créé une instance UIView.

Questions connexes