web-dev-qa-db-fra.com

Comment effectuer un enchaînement sans animation de transition

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?

29
voromax

Dupliquez votre séquence dans Storyboard et donnez au second un ID différent.

Vous pouvez ensuite modifier la transition dans la nouvelle version.

42
Gordon Dove
 self.performSegueWithIdentifier("loginSegue",sender: nil)

enter image description here

29
keithics

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.

8
k06a

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.

6
Shahid Aslam