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é?
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
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