2010-04-22 5 views
0

Mon shake fonctionne bien (en utilisant motionEnded), basé sur le code GLPaint d'Apple. Lorsque l'utilisateur secoue le périphérique (exécutant 3.0 et plus), je veux ouvrir un contrôleur de vue modalement en utilisant presentModalViewController.Secouer pour ouvrir modalement

Dans mon appdelegate J'ai la notification (selon l'exemple de code GLPaint):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeToOpenHiddenScreen) name:@"shake" object:nil]; 

Dans mon shakeToOpenHiddenScreen Je veux juste ouvrir la vue « x » modalement mais je ne pense pas que mon appdelegate sera répondre à presentModalViewController.

Y a-t-il un moyen de contourner cela?

Répondre

0

Il s'agit d'une méthode sur UIViewController, vous devez donc avoir accès à un contrôleur de vue enregistré à partir de votre appDelegate, ou bien configurer la notification pour en appeler un (addObserver: someVC). "Shake" n'est pas un nom de notification standard, donc il devrait y avoir du code ailleurs dans votre application qui publie cette notification, vraisemblablement aussi copiée à partir de l'exemple de GLPaint.

1

Pour utiliser presentModalViewController vous devez l'utiliser d'une classe UIViewController ou sous-classe:

Par exemple: //RootViewController.m [self.navigationController presentModalViewController: loginRegView animé: OUI];

Vous pouvez ainsi contourner ce problème en définissant un contrôleur de navigation dans votre délégué application:

//yourApp_comAppDelegate.h 
UINavigationController *nav; 
... 
@property(nonatomic,retain) UINavigationController *nav; 

et synthétisent

@syntetize nav;  

Pour utiliser presentModalViewController vous devez l'utiliser d'une classe UIViewController, ou sous-classe:

Par exemple:

//RootViewController.m 
[self.navigationController presentModalViewController:loginRegView animated:YES]; 

Vous pouvez ainsi contourner ce problème en définissant un contrôleur de navigation dans votre délégué application:

//yourApp_comAppDelegate.h 
UINavigationController *nav; 
... 
@property(nonatomic,retain) UINavigationController *nav; 

synthétiser

//yourApp_comAppDelegate.m 
@synthesize nav; 

et vous pouvez maintenant utiliser la méthode:

//yourApp_comAppDelegate.m 
[nav presentModalViewController:yourView animated:YES]; 

mais, d'abord vous devez l'assigner quelque part, je le ferai dans le RootViewController

//RootViewController.m 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
app = (yourApp_comAppDelegate *) [[UIApplication sharedApplication] delegate]; 
    app.nav = self.navigationController 
} 

Il faut travailler, laissez-moi savoir :)

+0

Vous devez modifier pour supprimer le texte répété. En outre, un contrôleur nef n'est pas plus utile à cette fin que tout autre contrôleur de vue, et il devrait idéalement y avoir un contrôleur de vue appelé depuis le délégué de l'application dans n'importe quelle application. –

+0

thx pour les conseils – Cesar

Questions connexes