推送没有动画的segue

Bre*_*don 13 animation cocoa-touch uikit uistoryboard segue

我正在编写一个基于故事板的iPhone应用程序并正在进行状态恢复.当正常执行segues时,我希望让它们具有动画效果,但是当我恢复导航层次结构的几个级别时,我只想让最后一个segue动画化.除了设置两组segue之外 - 一组使用普通push segue,另一组使用自定义非动画push segue - 有没有办法实现我想要做的事情?

Dav*_*e T 14

可以直接操作视图控制器堆栈,而与应用程序的segue或storyboard无关.

您可以使用此技术还原深层视图控制器,并仅对单个segue执行/动画到顶视图控制器.(您可能需要为此目的创建特定的推送segue.)

例如,要还原两个视图控制器堆栈,您可以执行以下操作.在此示例中,假设现有视图控制器上的某些操作会导致状态还原,但您可以从App Delegate轻松执行该操作.

[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;
     }
}
Run Code Online (Sandbox Code Playgroud)

相反,如果你不喜欢没有动画,那么它仍然更容易.可以通过操纵视图控制器栈(和不使用任何塞格斯)从单独恢复状态- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions- (void)applicationWillEnterForeground:(UIApplication *)application.

无论哪种方式都可以无缝地与您现有的故事板和segue一起工作.

  • `pushViewController:animated:`不仅会将视图控制器添加到堆栈中 - 它还会刷新视图以显示视图控制器.在这种情况下,我们不希望看到`page1ViewController`,即使是简单的,所以我们必须直接将它们添加到堆栈中. (4认同)