在注销时回到初始故事板ViewController

时间:2012-10-22 16:56:45

标签: iphone ios uistoryboard uistoryboardsegue

我在iOS中使用故事板。第一个屏幕是登录屏幕。当用户注销或退出时,他可能位于深层次结构的屏幕上。

例如:login view controller =>模态视图控制器=>标签栏控制器=> nav controller => view controller =>查看控制器。我想从最顶层的视图控制器一直回到底部控制器。

编辑:以下是视图层次结构图:enter image description here

谢谢!

3 个答案:

答案 0 :(得分:5)

我为UIViewControllers写了一个似乎正在运作的类别:

- (void) popToInitialViewController
{
    UIViewController *vc;
    if (self.navigationController != nil) {
        vc = self.navigationController;
        [self.navigationController popToRootViewControllerAnimated:NO];
        [vc popToInitialViewController];
    }
    else if (self.tabBarController != nil) {
        vc = self.tabBarController;
        [vc popToInitialViewController];
    }
    else if (self.presentingViewController != nil) {
        vc = self;

        while (vc.presentingViewController != nil)
            vc = vc.presentingViewController;

        [vc dismissModalViewControllerAnimated:NO];

        [vc popToInitialViewController];
    }
}

赞赏评论:)

答案 1 :(得分:2)

这应该可以正常运行,假设所有内容都被推送到导航堆栈:

[self.navigationController popToRootViewControllerAnimated:YES];

答案 2 :(得分:0)

就我而言,我直接设置窗口 rootViewController ,如下所示:

func popToInitialScreen() {
    let window = UIApplication.shared.keyWindow
    window.rootViewController = nil
    window.rootViewController = // init your initial view controller
    window.makeKeyAndVisible()
}

P.S keyWindow在iOS 13中已过时,不应用于支持多个场景的应用程序,因为它会返回所有已连接场景的关键窗口。