我有几个选项卡,每个选项卡都显示两个或三个视图控制器。我没有使用导航栏/控制器。在当前情况下,以模态方式呈现前进的步态。我还拥有一些连接到各自的IBAction的放松程序,这些IBAction定义了要显示的选项卡栏项。我在呈现的Viewcontroller中也有一个viewWillDisappear函数,如下所示:
override func viewWillDisappear(_ animated: Bool) {
self.dismiss(animated: true, completion: nil)
super.viewWillAppear(true)
}
最后,将显示的Viewcontroller设置为定义上下文。这种配置使我可以选择不同的视图控制器,同时仍始终保持底部的标签栏可见。
只要选项卡栏项包含可以深入两个视图控制器的标记,此解决方案就可以完美地工作。但是,当深度为三个或更多视图时,该解决方案将停止工作。例如,布局如下:
TabA ---> ViewA ---> ViewB
TabB ---> ViewC ---> ViewD ---> ViewE
TabC ---> ViewF
我返回TabA,并将视图正确重置为ViewA(而不是ViewB,这是我在步骤2中转到TabB时停下的位置)。
以前没有以上配置,返回TabA时会出现黑屏。在这里,ViewB仍处于选中状态,并且未重置为ViewA。单击ViewA时,我会出现黑屏。
但是,当Tab的深度为三层时,仍然会出现黑屏,而对于具有两层的Tab的行为已得到解决。
在失败的情况下,我执行以下操作: 6a。我选择TabB并导航到ViewC,然后导航到ViewD。 6b。然后从ViewD移至TabC。 6c。我回到TabB。视图D仍处于活动状态。 6d。我从TabB中选择ViewC,然后得到黑屏。
我的工作配置(带有两个选项卡)如下:
TabA ---> ViewA(将上下文,模态/当前上下文序列定义为ViewB,并具有IBAction来处理在从ViewB返回时设置选项卡项)---> ViewB(具有将序列解散到IBAction,并具有上述的viewWillDisappear函数)。
失败的配置如下:
TabB ---> ViewC (defines context, modal/current context segue to ViewD, IBAction to handle the return from ViewD)
---> ViewD (defines context, modal/current context segue to ViewE, IBAction to handle the return from ViewE, viewWillDisappear function from above, unwind segue back to ViewC)
---> ViewE (unwind segue back to ViewD, and the viewWillDisappear code from above).
理想情况下,当视图的深度超过两层时,我希望黑屏也能正常工作。