推送到另一个选项卡的视图控制器
Posted
技术标签:
【中文标题】推送到另一个选项卡的视图控制器【英文标题】:push to another tab's viewcontroller 【发布时间】:2017-04-21 10:47:22 【问题描述】:当用户单击某个单元格上的按钮时(视图) 我想推到另一个标签的视图控制器
标签栏控制器 --- 导航控制器 ---- VC A --- 导航控制器 ---- VC B --- 导航控制器 ---- VC C ---- VC D
like 从 viewcontroller A 到 viewcontroller D
我试过转场
self.window?.visibleViewController?.performSegue(withIdentifier:"homeSegueDetailStatement", sender: self)
工作但没有导航栏....
我尝试创建一个导航控制器并显示,崩溃了...
if let visibleViewCtrl = UIApplication.shared.keyWindow?.visibleViewController
let nav = UINavigationController(rootViewController: visibleViewCtrl)
let b = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PendingStatementVC") as! PendingStatementViewController
nav.pushViewController(b, animated:false)
visibleViewCtrl.present(nav, animated:true, completion:nil)
请帮帮我
编辑---
实际上我想将选项卡和导航更改为第二个视图控制器。 我从 collectionCell 调用这个函数,这就是为什么我必须获取当前视图控制器
编辑--- 我找到了我想要的
DispatchQueue.global().async
DispatchQueue.main.async
self.tabBarController?.selectedIndex = 2
if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DetailStatementVC") as? DetailStatementViewController
if let navigator = self.tabBarController?.viewControllers?[2] as? UINavigationController
navigator.pushViewController(controller, animated: true)
【问题讨论】:
如果你推视图控制器,那你为什么要再次展示视图控制器 你需要从 appdelegate 或 Viewcontroller 推送? 你能展示你的故事板场景吗 【参考方案1】:使用下面的代码,您可以从 VC-A 转到 VC-D,然后您可以从 VC-D 回到 VC-C
let dViewController = self.storyboard?.instantiateViewController(withIdentifier: "DViewController") as! DViewController
let thirdTabNavController = self.tabBarController?.viewControllers?[2] as! UINavigationController
thirdTabNavController.pushViewController(dViewController, animated: false)
self.tabBarController?.selectedIndex = 2
【讨论】:
【参考方案2】:试试这样的:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "mainView") as! MainViewController
self.present(nextViewController, animated:true, completion:nil)
【讨论】:
【参考方案3】:这样试试
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let MainViewControllerObj : MainViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
let navigationControllerObj:UINavigationController = UINavigationController.init(rootViewController: MainViewControllerObj)
self.present(navigationControllerObj, animated:true, completion:nil)
【讨论】:
【参考方案4】:Kamil3 的答案肯定是最好的,但是如果有人需要在导航栏中的“返回”按钮旁边隐藏标题,我发现不是很优雅的解决方案,但想分享一下,因为它花了我很多时间:
guard let dViewController =
self.storyboard?.instantiateViewController(withIdentifier: "DViewController") as! DViewController,
let thirdTabNavController = self.tabBarController?.viewControllers?[2] as! UINavigationController else
return
self.tabBarController?.selectedIndex = 2
// here what you need
thirdTabNavController.viewControllers.first?.title = " "
thirdTabNavController.pushViewController(dViewController, animated: false)
【讨论】:
【参考方案5】:Try below code:
let mainStoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = mainStoryBoard.instantiateViewController(withIdentifier: "DcontrollerIdentifier") as! DViewController
self.navigationController?.pushViewController(nextViewController, animated: true)
【讨论】:
以上是关于推送到另一个选项卡的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)
通过远程通知从 AppDelegate 推送到 UINavigationController