Подтвердить что ты не робот

Push segue без анимации

Я пишу приложение для iPhone на основе раскадровки и работаю над восстановлением штата. Обычно, когда вы выполняете segues, я хочу, чтобы они оживляли, но когда я восстанавливаю несколько уровней иерархии навигации, мне нужно только оживить последний сеанс. Помимо настройки двух наборов segues - одного набора, который использует обычный push-сегмент, а другой, который использует настраиваемый неанимационный push-segue, - есть ли способ достичь того, что я пытаюсь сделать?

4b9b3361

Ответ 1

Можно напрямую манипулировать стеком контроллера представления, независимо от приложений или раскадровки.

Вы можете использовать эту технику для восстановления глубокого стека контроллеров представлений и выполнить/оживить только один сеанс для контроллера верхнего уровня. (Для этой цели вам, вероятно, понадобится создать специальный push-сегмент.)

Например, чтобы восстановить два стека контроллера представления, вы можете сделать следующее. В этом примере он предположил, что некоторые действия на существующем контроллере представлений приводят к восстановлению состояния, но вы можете так же легко выполнить его из своего делегата приложения.

[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;
     }
}

Если вместо этого вы предпочитаете не иметь анимации, тогда это еще проще. Вы можете восстановить состояние только путем управления стеком контроллера представления (и без использования каких-либо segues) от - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions и - (void)applicationWillEnterForeground:(UIApplication *)application.

В любом случае это будет работать без сбоев и в сочетании с существующими раскадрой (s) и segues.