2012-09-19 17 views
5

E 'possibile "popare" una vista da qualsiasi punto in un'applicazione iOS.Popping di una vista modale da qualsiasi punto del codice

Ad esempio, voglio che un evento attivi una vista che scorre in (modale) e che l'evento possa avvenire in qualsiasi momento, su qualsiasi schermata dell'applicazione.

Inoltre, ci piacerebbe che questo fosse qualcosa che può essere incluso in altri progetti e preferiremmo che non dovessimo fare nulla di speciale per questi progetti (a parte il filo nel progetto di riferimento).

risposta

6

In questo caso è meglio giocare con l'appdelegate, ma dipende dal tipo di applicazione che si sta utilizzando.

creare un metodo in AppDelegate che è possibile chiamare da qualsiasi controller di vista

- (void)myMethod { 
    MyController *myController = [[MyController alloc] init]; 
    [self.window.rootViewController presentModalViewController:myController animated:YES]; 
} 

e per respingere questo controller è necessario creare azione sul viewcontroller stesso.

NOTA: è possibile avere solo 1 modelviewcontroller alla volta, quindi assicurarsi che modelviewcontroller sia un controller di navigazione in sé per impilare tutte le visualizzazioni in esso.

qualcosa di simile,

- (void)myMethod { 
    MyController *myController = [[MyController alloc] init]; 
    if([self.window.rootViewController modalViewController]) { 
      [(UINavigationController *)self.window.rootViewController.modalViewController pushViewController:myController animated:YES]; 
    } else { 
      UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myController]; 
      [self.window.rootViewController presentModalViewController:navController animated:YES]; 
    } 
} 
+0

Per quanto riguarda la nota su cui è consentito un solo controller di visualizzazione modale alla volta, questo non è ciò che Apple dice (consultare "chain of modal view controller" all'indirizzo https://developer.apple.com/library/ios/featuredarticles/ ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html) – Clafou

0

Se si desidera che il modale per chiudere in sé (con un pulsante, forse?) Semplicemente chiamare:

[self dismissViewControllerAnimated:YES completion:NULL]; 

Questo sarà automaticamente in avanti al controller della vista che ha mostrato e respingere il controller di vista modale.

Problemi correlati