En este caso, es mejor jugar con el dispositivo delegado, pero depende del tipo de aplicación que esté utilizando.
crear un método en AppDelegate que se puede llamar desde cualquier controlador de vista
- (void)myMethod {
MyController *myController = [[MyController alloc] init];
[self.window.rootViewController presentModalViewController:myController animated:YES];
}
y para despedir a este controlador tiene que crear una acción en el propio viewcontroller.
NOTA: usted solo puede tener 1 modelviewcontroller a la vez, así que asegúrese de que su modeloviewcontroller sea un controlador de navegación en sí mismo para apilar todas sus vistas en él.
algo como esto,
- (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];
}
}
Con respecto a la nota de que se permite solo un controlador de vista modal a la vez, esto no es lo que dice Apple (ver "cadena de controladores de vista modal" en https://developer.apple.com/library/ios/featuredarticles/ ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html) – Clafou