保护变量控制器=rootViewController?。 presentedViewController else{将rootViewController作为UINavigationController返回} while let presented=控制器.presentedViewController{ 控制器=显示 } 控制器=控制器。导航控制器?? 控制器 返回控制器为? UI导航控制器
-
建议检查来自的答案 在这里 ,抓取顶部视图控制器,然后获取导航控制器 – Tj3n型 评论 2018年8月1日3:50 -
1 您只需使用self.navigationController来设置当前活动的导航控制器 – vivekDas公司 评论 2018年8月1日5:00
2个答案
扩展UI应用程序{ 类func topViewController(_viewController:UIViewController?=UIApplication.shared.keyWindow?.rootViewController)->UIViewController? { 如果让nav=viewController为? UI导航控制器{ return topViewController(导航可见视图控制器) } 如果let tab=viewController为? UI选项卡栏控制器{ 如果选择let=tab.selectedViewController{ return topViewController(选中) } } 如果让显示=viewController?。 演示视图控制器{ return topViewController(显示) } 返回视图控制器 } 类函数topNavigationController(_viewController:UIViewController?=UIApplication.shared.keyWindow?.rootViewController)->UINavigationControl? { 如果让nav=viewController为? UI导航控制器{ 返回导航 } 如果let tab=viewController为? UI选项卡栏控制器{ 如果选择let=tab.selectedViewController{ return selected.navigation控制器 } } return viewController?。 导航控制器 } }
让objViewcontroller=UIApplication.topViewController()
让objNavigationController=UIApplication.topNavigation()
-
不,1)我不想扩展,也没有要求扩展2)我不想要递归解决方案,3)你错过了整个问题。 如果你读了我的帖子,我会问两件事:1)我的解决方案足够吗?2)我为什么要使用 演示视图控制器 结束 演示视图控制器 。如果你想更新你的答案以反映这一点,并且它有效,那么我会接受。 – 垃圾桶 评论 2018年8月1日16:54 -
1 在SwiftUI中,我在选项卡视图中嵌入了4个导航堆栈。 我在UIKit中使用了类似的东西来poptoroot。 我发现它只适用于第一个选项卡。解决方案是使用上述代码找到tabviewcontroller,然后在选项卡视图中找到所选的导航控制器。 现在我可以从每个标签中弹出根目录! 谢谢! – 弗朗索贾梅斯凡 评论 2022年11月16日20:32
这足够吗?
…我不明白的是
rootViewController?。 演示视图控制器 .应该是吗
rootViewController?。 演示视图控制器 ?