如何从模态呈现的视图控制器返回到选定的选项卡栏视图控制器?

问题描述

enter image description here

标签栏控制器中,我想以模态方式显示 2 个其他视图控制器(全屏)。完成全屏 1 和 2 后,我想回到 标签栏控制器中的选定标签

但是,当我使用:

Self.view.window.rootviewcontroller.dismiss(animated: true,completion: nil)

它带我回来,但“viewdidappear”没有重新运行。如何再次呈现选中的标签栏 VC 以便“viewdidappear”再次运行?

解决方法

而不是依赖 viewdidappear 在关闭两个全屏视图控制器时调用。我建议您在关闭两个全屏时委派刷新标签栏内容的任务。

例如:

    //fullscreen 2 dismiss action
         func done()
        {
           dismiss(animated: true,completion: {
                  //here you can have reference to presenter view controller as delegate and pass your info to that delegate
                   var info = some info captured from full screen two view controller.
                   delegate.dismissAndRefresh(info:info)
                }
        }

//In Full screen 1 view controller
   func dismissAndRefresh(info: Dictionary)
   {
      dismiss(animated: true,completion: {
          //have reference to tab bar controller and pass the info to tab controller.
      tabBarControllerDelegate.refreshContent(info)

      }
   }
//In tab controller
func refreshContent(info:Dinctionary)
{
  //refresh your content as you are doing in view did appear.
}

这不是您可以尝试将信息从全屏 2 视图控制器直接传递给标签栏控制器并关闭两个呈现的全屏视图控制器的唯一方法。

但是当您查看层次结构更改时,使用自视图窗口获取根视图控制器会导致很多问题,例如,显示了其他控制器或显示了某些警报。