我在我的iOS项目中使用storyboards。第一个屏幕是登录屏幕。当用户注销或被注销时,他可能在深层次的屏幕上。例如:登录视图控制器 => 模态视图控制器 => 标签栏控制器 => 导航控制器 => 视图控制器 => 视图控制器。我想从最顶层的视图控制器一直返回到底部一个。以下是查看层次结构图:
。谢谢!
![enter image description here](https://istack.dev59.com/IGcpA.webp)
我编写了一个针对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];
}
}
欢迎留言 :)
假设所有内容都被推送到导航栈中,这应该可以正常工作:
[self.navigationController popToRootViewControllerAnimated:YES];
func popToInitialScreen() {
let window = UIApplication.shared.keyWindow
window.rootViewController = nil
window.rootViewController = // init your initial view controller
window.makeKeyAndVisible()
}
注意:在iOS 13中,keyWindow已被弃用,不应该用于支持多个场景的应用程序,因为它会返回所有连接场景中的关键窗口。