2009-07-12 24 views
1

C'est amusant ... J'ai une application qui a un écran d'aide et qui est affichée comme une vue modale. La vue principale a une action qui se produit lorsque le périphérique est secoué. Je ne veux pas que l'action se produise (les sons sont joués) quand l'écran d'aide a été affiché.Détecter quand la vue modale a été affichée

J'ai essayé quelques petites choses ... voici mon code:

Pour afficher l'écran d'aide:

- (IBAction)helpButtonPressed:(id) sender { 
    helpViewController = [[HelpViewController alloc] init]; 
    [self presentModalViewController:helpViewController animated:YES]; 
} 

Pour libérer l'écran d'aide:

- (IBAction)buttonPressed:(id) sender { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

J'ai essayé ce qui suit sans succès:

if ([helpViewController.view isHidden ]) { 
    NSLog(@"Shake -- helpView is loaded"); 
} else { 
    NSLog(@"Shake -- helpView is not loaded"); 
} 


if ([helpViewController isViewLoaded]) { 
    NSLog(@"Shake -- helpView is loaded"); 
} else { 
    NSLog(@"Shake -- helpView is not loaded"); 
} 

if ([self isViewLoaded]) { 
    NSLog(@"Shake -- helpView is loaded"); 
} else { 
    NSLog(@"Shake -- helpView is not loaded"); 
} 

Ce que je pensais est s'il y a une fonction pour me permettre de détecter si la vue d'aide montre, je reviendrai sans jouer les sons quand l'appareil est secoué ....

Des idées?

Répondre

2

Je suppose que le contrôleur de vue qui charge le contrôleur modal est également le contrôleur de vue qui répond à l'action de secousse. Si tel est le cas, vous pouvez utiliser modalViewController propriété du contrôleur de vue parent pour voir si le contrôleur modal est actif:

if(self.modalViewController != nil) { 
    // Modal view controller is active; do nothing 
    NSLog(@"Shake -- helpView is loaded"); 
    return; 
} else { 
    // No modal view controller; take action 
    NSLog(@"Shake -- helpView is not loaded"); 
    [self performSomeAction]; 
}
+0

Fonctionne parfaitement! Merci! –