Pregunta

Estoy escribiendo una aplicación para iPhone basada en el guión gráfico y trabajando en la restauración estatal. Al realizar los segues normalmente, quiero que se animen, pero cuando estoy restaurando varios niveles de una jerarquía de navegación, solo quiero que la última segue anime. Además de configurar dos conjuntos de segues, un conjunto que utiliza un Segue Push normal y otro que utiliza un Segue Push Push personalizado personalizado, ¿hay alguna forma de lograr lo que estoy tratando de hacer?

¿Fue útil?

Solución

Es posible manipular directamente la pila de controladores de vista, independientemente de los segues o guionesor de la aplicación.

Puede usar esta técnica para restaurar una pila profunda de controladores de vistas y realizar / animar solo un segue al controlador de vista superior. (Es probable que necesite crear un Segue Push específico para este propósito).

Por ejemplo, para restaurar una pila de controlador de dos vistas, puede hacer lo siguiente. En este ejemplo, se supone que alguna acción en un controlador de vista existente conduce a la restauración del estado, pero puede realizarla fácilmente desde el delegado de su aplicación.

[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, en cambio, prefiere no tener animaciones, entonces es más fácil. Puede restaurar el estado únicamente manipulando la pila de controlador de vista (y sin usar ningún seguido) de - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions y - (void)applicationWillEnterForeground:(UIApplication *)application.

De cualquier manera, funcionará sin problemas y en conjunto con sus guiones de guiones y segues existentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top