Domanda

Sto scrivendo un'app per iPhone basata sullo storyboard e sto lavorando al restauro dello stato. Quando eseguo i segues normalmente, voglio che li animano, ma quando ripristino diversi livelli di una gerarchia di navigazione, voglio solo l'ultimo seguito. Oltre a impostare due set di segues-un set che utilizza una normale push segu e un altro che utilizza una push segue non animato personalizzata-c'è un modo per raggiungere ciò che sto cercando di fare?

È stato utile?

Soluzione

È possibile manipolare direttamente lo stack del controller di visualizzazione, indipendentemente dai segues o dagli storyboard dell'applicazione.

Puoi usare questa tecnica per ripristinare una profonda pila di controller di visualizzazione ed eseguire / animare solo un singolo seguito al controller di vista superiore. (Probabilmente dovrai creare una push specifica segua a questo scopo.)

Ad esempio, per ripristinare uno stack controller a due visualizzazioni, è possibile fare quanto segue. In questo esempio, si presume che alcune azioni su un controller di visualizzazione esistente portano al ripristino dello stato, ma puoi eseguirlo altrettanto facilmente dal delegato dell'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;
     }
}

Se, invece, preferisci non avere animazioni, allora è ancora più facile. È possibile ripristinare lo stato solo manipolando lo stack del controller di visualizzazione (e senza usare alcuna segues) - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions e - (void)applicationWillEnterForeground:(UIApplication *)application.

Ad ogni modo, funzionerà perfettamente e in tandem con i tuoi storyboard (i) esistenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top