Question

J'écris une application iPhone basée storyboard et de travailler sur la restauration de l'Etat. Lorsque vous effectuez les normalement enchaînements, je veux avoir les animer, mais quand je restaurer plusieurs niveaux d'une hiérarchie de navigation, je veux que la dernière Segue Animer. Autre que la mise en place de deux ensembles de un jeu-enchaînements qui utilise une Segue poussée normale, et une autre qui utilise une poussée Segue-est-il un moyen non-animant personnalisé pour obtenir ce que je suis en train de faire?

Était-ce utile?

La solution

Il est possible de manipuler directement la pile de contrôleur de vue, indépendamment des enchaînements ou story-boards de l'application.

Vous pouvez utiliser cette technique pour restaurer un deepstack de contrôleurs de vue, et d'effectuer / Animer un seul Segue au contrôleur de vue de dessus. (Vous aurez probablement besoin de créer un enchaînement de poussée spécifique à cet effet.)

Par exemple, pour restaurer une pile de contrôleur à deux point de vue, vous pouvez faire ce qui suit. Dans cet exemple, on suppose qu'une action sur un conduit de contrôleur de vue existant à l'état de restauration, mais vous pouvez aussi effectuer facilement de votre délégué App.

[self performSegueWithIdentifier:@"Page2Express" sender:self];

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Page2Express"])
    {
        // Get any state data you need to from Core Data
        CoreDataType *valuePulledFromCoreData = // ...

        // Set up the page 2 view controller as you normally would
        Page2ViewController *page2ViewController = segue.destinationViewController;
        page2ViewController.instanceVariable = valuePulledFromCoreData;

        // Create a loose, page 1 view controller and set it up as required
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
        Page1ViewController *page1ViewController = [storyboard instantiateViewControllerWithIdentifier:@"Page1ViewController"]; // Ensure you have this identifier set up in your storyboard
        page1ViewController.instanceVariable = valuePulledFromCoreData;

        // Add the page 1 view controller to the top of the navigation stack (to be later obscured in the segue by the page 2 view controller)
        NSMutableArray *viewControllers = [[self navigationController].viewControllers mutableCopy];
        [viewControllers addObject:page1ViewController];
        [self navigationController].viewControllers = viewControllers;
     }
}

Si, au contraire, vous préférez avoir aucune animation, alors il est encore plus facile. Vous pouvez restaurer l'état uniquement en manipulant la pile de contrôleur de vue (et sans utiliser) de - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions enchaînements et - (void)applicationWillEnterForeground:(UIApplication *)application.

De toute façon fonctionnera de façon transparente et en tandem avec votre story-board existante (s) et des enchaînements.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top