在没有层次结构的情况下在两个视图

时间:2014-04-29 05:45:42

标签: ios objective-c uiviewcontroller segue

我有一些ViewControllers都有按钮,这些按钮应该与其他按钮相对应。永远不会有一个后退按钮,而是所有东西都通过一堆循环连接起来,这样就永远不会有死胡同。因此,我希望从一个View Controller完全转换到另一个View Controller,并完全删除旧的View Controller。视图控制器之间没有层次结构,也没有父/子关系。我应该如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

实例化您要转到的视图控制器,然后将其设置为窗口的根视图控制器。

NextViewController *next = [self.storyboard instantiateViewControllerWithIdentifier:@"Next"]; // or other instantiation method depending on how you create your controller
self.view.window.rootViewController = next;

如果您想在故事板中显示从控制器到控制器的流程,您可以使用自定义segues执行此操作(那时您根本不需要任何代码)。自定义segue的执行方法看起来像这样,

@implementation RootVCReplaceSegue

-(void)perform {
    UIViewController *source = (UIViewController *)self.sourceViewController;
    source.view.window.rootViewController = self.destinationViewController;
}

如果您想要淡入淡出动画,可以将源视图控制器的快照添加为目标视图控制器视图的子视图,然后将其淡出,

-(void)perform {
    UIViewController *source = (UIViewController *)self.sourceViewController;
    UIView *sourceView = [source.view snapshotViewAfterScreenUpdates:YES];
    [[self.destinationViewController view] addSubview:sourceView];
    source.view.window.rootViewController = self.destinationViewController;
    [UIView animateWithDuration:.5 animations:^{
        sourceView.alpha = 0;
    } completion:^(BOOL finished) {
        [sourceView removeFromSuperview];
    }];
}