我在iOS中使用故事板。第一个屏幕是登录屏幕。当用户注销或退出时,他可能位于深层次结构的屏幕上。
例如:login view controller =>模态视图控制器=>标签栏控制器=> nav controller => view controller =>查看控制器。我想从最顶层的视图控制器一直回到底部控制器。
编辑:以下是视图层次结构图:
谢谢!
答案 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中已过时,不应用于支持多个场景的应用程序,因为它会返回所有已连接场景的关键窗口。