如何隐藏 Tabbarcontroller 的第一个视图控制器并直接转到下一个控制器但应在底部显示标签栏项目
Posted
技术标签:
【中文标题】如何隐藏 Tabbarcontroller 的第一个视图控制器并直接转到下一个控制器但应在底部显示标签栏项目【英文标题】:How to hide Tabbarcontroller's first view controller and go directly to the next controller but should show the tab bar items at the bottom 【发布时间】:2018-06-14 18:04:36 【问题描述】:我有一个视图控制器作为我的初始视图控制器。其中有一个按钮(GO 按钮),当用户点击它时,它应该转到另一个视图控制器(我们称它为目标视图控制器,标签为“这是我想去的地方”)。同时我想通过一个 Tabbar 控制器传递它。原因是我想在我的导航堆栈中有标签栏。 我希望在按下 go 按钮的同时直接进入目标视图控制器,但它应该在底部显示标签栏项目。 因此,为了在 FirstViewController didLoadMethod 中实现这一点,我检查了一个布尔值并将视图控制器推送到目标视图控制器。我实现了结果,即当按下 Go 按钮时,它转到 Destination 视图控制器并在其底部有标签栏项目。 但是问题是,因为它通过 Tabbarcontroller,FirstViewController 会显示几秒钟,然后它会推送到 Destination 视图控制器。我希望在此转换发生时隐藏 FirstViewController。 如何做到这一点? 图片显示了我想要的。在将 firstviewcontroller 放在导航堆栈中时,我该怎么做才能隐藏它?
【问题讨论】:
【参考方案1】:我觉得这可以以简单的方式来完成 - P>
在标签栏的第一的viewController具有的 viewDidLoad中()强>功能,也可以使用的loadView()强>其中在viewDidLoad中()函数之前调用。推到下一个的viewController中的功能。 LI>把你的推导航代码中的那些功能中的一个强>
*你不能看到当前视图coltroller,它会在屏幕推到你所需要的ViewController加载标签栏初始视图位指示之前。 P>
希望它会为你工作。 P>
或>>>>可以检查出来 P>
let storyboard = UIStoryboard(name: "your_storyBoard_name", bundle: nil)
let viewController1 = storyboard.instantiateViewController(withIdentifier: "firstViewController")
let viewController2 = storyboard.instantiateViewController(withIdentifier: "secondViewcontroller")
let controllers = [viewController1, viewController2]
self.navigationController!.setViewControllers(self.navigationController!.viewControllers + controllers, animated: true)
【讨论】:
你面对和代码是不工作的问题是 - 你在你的项目中有一个单一的导航控制器 SPAN> 设置在你AppDelegate.swift 跨度> 兄弟我尝试了不wroking ......请帮助我基于故事板框架上的样品Git项目,我在连接问题 SPAN> @ ChelseaShawra做你找到了一个解决方案?我有一个的TabBar,但我不想要加载的第一视图控制器跨度> 【参考方案2】:您尝试制作的效果很难在情节提要中实现。以编程方式,您只需创建 Tabbar 控制器(及其子级)和“这是我想去的地方”控制器,然后让导航控制器同时显示两者。
例如,点击“Go”后,这是我将在您的第一个视图控制器中运行的代码:
let tabBarController = UITabBarController()
let finalDestination = UIViewController()
var viewControllers = self.navigationController?.viewControllers ?? []
viewControllers.append(tabBarController)
viewControllers.append(finalDestination)
self.navigationController?.setViewControllers(viewControllers, animated: true)
【讨论】:
效果还是一样【参考方案3】:鉴于您显示的结构,其中视图控制器 A 是 TabBar 的根视图控制器,您应该根据您的个人业务将第二个视图控制器 B 推送到视图控制器 A 的 willAppear 或 didLoad 内的导航堆栈中逻辑(标志、条件等)。
这里的技巧是使用带有 animated: false 的 pushViewController 或 setViewControllers 以便在 willAppear/didLoad 期间立即设置导航堆栈并且它不会显示B 在 A 上的推送动画。这样,在 onDidAppear 布局将已经完全呈现在其最终状态:B 在导航堆栈的顶部,并且没有正在进行的动画。
【讨论】:
以上是关于如何隐藏 Tabbarcontroller 的第一个视图控制器并直接转到下一个控制器但应在底部显示标签栏项目的主要内容,如果未能解决你的问题,请参考以下文章
无法隐藏 UINavigationBar 或在 TabBarController 中加载内部 HTML