注销后返回初始故事板视图控制器

6
我在我的iOS项目中使用storyboards。第一个屏幕是登录屏幕。当用户注销或被注销时,他可能在深层次的屏幕上。例如:登录视图控制器 => 模态视图控制器 => 标签栏控制器 => 导航控制器 => 视图控制器 => 视图控制器。我想从最顶层的视图控制器一直返回到底部一个。以下是查看层次结构图:enter image description here。谢谢!
3个回答

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

欢迎留言 :)


2

假设所有内容都被推送到导航栈中,这应该可以正常工作:

[self.navigationController popToRootViewControllerAnimated:YES];

啊,我明白了,很好的图表。在注销时,你可能还需要使用NSNotificationCenter来发布一个通知。你的第一个模态视图控制器可以监听该通知,并在收到通知时关闭自己。 - Edwin Iskandar

0
在我的情况下,我直接设置了窗口的rootViewController,代码如下:
func popToInitialScreen() {
    let window = UIApplication.shared.keyWindow
    window.rootViewController = nil
    window.rootViewController = // init your initial view controller
    window.makeKeyAndVisible()
}

注意:在iOS 13中,keyWindow已被弃用,不应该用于支持多个场景的应用程序,因为它会返回所有连接场景中的关键窗口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接