PerformSegue 从 TabBarController 到 ViewController 而不隐藏 TabBar

PerformSegue from TabBarController to ViewController without hiding TabBar

我用 Xcode 和 Swift 创建了一个 iOS 应用程序。我的 Storyboard 包含五个 ViewControllers,由一个 TabBarController.

管理

有没有办法在底部的 TabBar 不消失的情况下从 UITabBarControllerUIViewController 执行转场?

实现这一点的最佳方法是将包含在选项卡栏控制器中的视图控制器包装在 UINavigationController 中。然后在该视图中,您可以将新视图推送到导航控制器并保留选项卡栏控制器。

查看这个 link 关于组合视图控制器 https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/CombiningViewControllers.html

UIWindow root
|
UITabbarController
|
|- UINavigationController - navigationStack
|                                         |- 1 - SomeViewController
|                                         |- ...
|                                         |- ...
|                                         |- N'th...SomeViewController
|- SomeViewController
|- SomeViewController
|- SomeViewController

以上是正确的视图控制器层次结构。尝试以任何其他方式做到这一点没有任何意义。 在示例中,我只将第一组控制器嵌入到导航控制器中。它会做你要求的。您可以在任何选项卡栏位置使用此嵌入。

TabBarController 使用 VC 包含来显示控制器。 你可以像这样嵌入你的控制器

如果您要转到的视图控制器在选项卡栏视图控制器中,那么您只需要:

self.selectedIndex = INDEX_OF_VIEWCONTROLLER_IN_TABS

这将移动到控制器,就像您点击标签一样。

因此,您可以 let tabVC = storyboard.instantiateViewController("TABIDENTIFIER") as! UITabBarController(或 CustomTabBarController)

然后select索引tabVC.selectedIndex = index

如果您正在执行从 UITabBarControllerUIViewController 的转场,则无法保持显示 TabBar,尽管如果您从 view controller 开始执行转场(即标签)到 UIViewController TabBar 将不会被隐藏。

解法:

我问这个问题是为了以这种方式处理 QuickActions。这是有效的解决方案,没有 TabBar 消失: