导航到其他选项卡并返回时黑屏

时间:2019-01-15 12:55:50

标签: swift uitabbarcontroller segue modalviewcontroller unwind-segue

我有几个选项卡,每个选项卡都显示两个或三个视图控制器。我没有使用导航栏/控制器。在当前情况下,以模态方式呈现前进的步态。我还拥有一些连接到各自的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
  1. 我选择TabA,然后可以导航到ViewA和随后的ViewB。
  2. 我从ViewB跳到TabB,然后跳到TabC。
  3. 我返回TabA,并将视图正确重置为ViewA(而不是ViewB,这是我在步骤2中转到TabB时停下的位置)。

  4. 以前没有以上配置,返回TabA时会出现黑屏。在这里,ViewB仍处于选中状态,并且未重置为ViewA。单击ViewA时,我会出现黑屏。

  5. 但是,当Tab的深度为三层时,仍然会出现黑屏,而对于具有两层的Tab的行为已得到解决。

  6. 在失败的情况下,我执行以下操作: 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).

理想情况下,当视图的深度超过两层时,我希望黑屏也能正常工作。

0 个答案:

没有答案