Rilevare quando è stata mostrata vista modale
-
12-09-2019 - |
Domanda
Questo è un divertimento uno ... Ho una domanda che ha una schermata di aiuto e viene visualizzata come una vista modale. La vista principale ha un'azione che si verifica quando il dispositivo viene scossa. Non voglio l'azione a verificarsi (i suoni vengono riprodotti) quando viene visualizzata la schermata di aiuto.
Ho provato un paio di cose ... qui è il mio codice:
Per visualizzare la schermata di aiuto:
- (IBAction)helpButtonPressed:(id) sender {
helpViewController = [[HelpViewController alloc] init];
[self presentModalViewController:helpViewController animated:YES];
}
Per sbloccare la schermata di aiuto:
- (IBAction)buttonPressed:(id) sender {
[self dismissModalViewControllerAnimated:YES];
}
Ho provato quanto segue senza successo:
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");
}
Quello che stavo pensando è che se c'è una funzione per permettere a me di rilevare se la vista di aiuto sta mostrando, tornerò senza giocare i suoni quando il dispositivo viene scosso ....
Tutte le idee?
Soluzione
Sto assumendo che il controller della vista che carica il controller modale è anche il controller della vista che risponde all'azione scossa. Se questo è il caso, quindi è possibile utilizzare la proprietà modalViewController
del controller vista padre per vedere se il controller modale è attiva:
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];
}