J'ai une application qui commence par un contrôleur de navigation. Ce contrôleur de navigation peut ouvrir le contrôleur de vue modale:
- (void)openModalController:(id)sender
{
[self performSegueWithIdentifier:@"SegueIdentifier"];
}
Mais lorsque l'utilisateur ouvre une application en utilisant le schéma d'URL, je voudrais présenter l'application avec le contrôleur modal ouvert. J'ai donc ajouté quelques méthodes et essayé:
// Controller
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated]; // animated == NO in initial loading
if (_shouldOpenModalController) {
[self openModalController:nil];
}
}
- (void)setShouldOpenModalController:(BOOL)flag
{
_shouldOpenModalController = flag;
}
// AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (launchOptions) {
UINavigationController *nc = (UINavigationController *)self.window.rootViewController;
MyViewController *c = (MyViewController *)[ns topViewController];
[c setShouldOpenModalController];
}
}
Mais voici un problème: le openModalController:
effectue un enchaînement avec l'animation de transition que j'ai configurée dans le storyboard. Comment peut-on le faire sans animation? Existe-t-il une autre approche pour cette tâche?
Dupliquez votre séquence dans Storyboard et donnez au second un ID différent.
Vous pouvez ensuite modifier la transition dans la nouvelle version.
J'utilise cet extrait de code pour demander une autorisation dans viewDidLoad
:
[UIView setAnimationsEnabled:NO];
self.view.hidden = YES;
[self performSegueWithIdentifier:@"segue_auth" sender:self];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView setAnimationsEnabled:YES];
self.view.hidden = NO;
});
Lorsqu'elle est autorisée, la transition arrière est animée comme je le souhaite.
Une autre façon de le faire
YourViewController *aYourViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"aYourViewControllerIdentifier"];
[self.navigationController pushViewController:aYourViewController animated:NO];
et ajoutez le @"aYourViewControllerIdentifier"
pour afficher le contrôleur dans votre storyboard.