2 ViewControllers 以模态方式呈现 UITabBarController

Posted

技术标签:

【中文标题】2 ViewControllers 以模态方式呈现 UITabBarController【英文标题】:2 ViewControllers presenting a UITabBarController Modally 【发布时间】:2014-05-10 02:38:59 【问题描述】:

我正在尝试在 ios 应用程序中创建一个类似于 Instagram 相机“TabBarItem”功能的功能。当按下相机按钮时,tabBarController 会自行关闭(模态)并在背景中显示相机视图。当我们决定关闭相机视图时,tabBarController 会以模态方式呈现,一切都很好!我的问题与此实现类似。

我有一个自定义的UITabBar,其中 2 个“TabBarItems”应该执行上述操作。因此,当按下一个“TabBarItem”时,tabBarController 应该关闭(模态),并且随着 tabBarController 被关闭,背景中应该出现一个视图。其他“TabBarItem”也应该发生同样的情况,但会显示不同的视图。我已经想到了几种不同的方法来做到这一点,但它们似乎都不是真正“优雅”的,而且我还没有在 SO 上找到类似的问题。就这样吧。

为了便于描述:

TabBarItem1 (TB1) 被按下 -> TabBarController 关闭(模态) -> ViewController1 (VC1) 显示(因为 TabBarController 被关闭)

TabBarItem2 (TB2) 被按下 -> TabBarController 关闭(模态) -> ViewController2 (VC2) 显示(因为 TabBarController 被关闭)

第一种方法: 将 VC1 设置为 initialVC -> 以模态方式呈现 VC2(动画:否)-> 以模态方式呈现 TabBarController 那么,当... 按下 TB1 -> 关闭 TabBarController(动画:YES)-> 关闭 VC2(动画:NO) 问题:在关闭 TabBarController 之前,VC2 将可见。所以这是不行的。

第二种方法: 创建一个 ViewController(设置为 initialVC),其中包含 2 个 UIView(代表 VC1.view 和 VC2.view),这些 UIView 根据所选的 TabBarItem 隐藏/显示。这似乎是最合理的解决方案。但我不认为这很优雅。我想知道是否有人有任何建议。希望它没有我想象的那么混乱。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您执行方法 #1 并关闭 VC2(没有自己先关闭标签栏)是否会以正确的外观关闭堆栈中的两者?我没有跟上模态堆栈文档,但我认为这可能有效。

当您需要放回标签栏时,您可能需要做一些清理工作(尽管我认为当您重新呈现 vc2 时它应该会返回。)

【讨论】:

以上是关于2 ViewControllers 以模态方式呈现 UITabBarController的主要内容,如果未能解决你的问题,请参考以下文章

视图控制器以模态方式呈现/关闭时的通知?

以模态方式呈现 UIImagePickerController 时出错

如何以模态方式呈现标准 UIViewController

总是以模态的方式呈现

以模态方式呈现的 TableViewController 可抵抗滚动且难以消除

如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?