Ios 如何在不使用Swift中的导航控制器的情况下将选项卡栏菜单传播到子视图

Ios 如何在不使用Swift中的导航控制器的情况下将选项卡栏菜单传播到子视图,ios,swift,Ios,Swift,我有一个选项卡栏导航控制器,对于选项卡栏上可用的选项之一,我想执行以下操作,本例中的选项名称为“订单历史记录” 我想要一个带有活动指示器的简单视图控制器,以从Firebase数据库获取数据。收集完所有数据后,我有一个if语句。如果对Firebase的查询没有返回任何值,我想转到另一个视图控制器,该控制器将向用户显示他/她尚未下订单。但是,如果对Firebase的查询返回任何订单历史数据,那么我想使用一个表视图控制器,该控制器将以有组织的方式显示所有数据 我遇到的问题是,我希望在上面提到的每个子视

我有一个选项卡栏导航控制器,对于选项卡栏上可用的选项之一,我想执行以下操作,本例中的选项名称为“订单历史记录”

我想要一个带有活动指示器的简单视图控制器,以从Firebase数据库获取数据。收集完所有数据后,我有一个if语句。如果对Firebase的查询没有返回任何值,我想转到另一个视图控制器,该控制器将向用户显示他/她尚未下订单。但是,如果对Firebase的查询返回任何订单历史数据,那么我想使用一个表视图控制器,该控制器将以有组织的方式显示所有数据

我遇到的问题是,我希望在上面提到的每个子视图的底部都有选项卡栏菜单。我知道我可以通过将第一个视图(带有活动指示器的视图)嵌入到导航控制器中来实现这一点。但是,我注意到,一旦我点击另一个选项卡栏项目,然后返回到此选项卡栏项目(“订单历史记录”选项卡栏项目),它不会显示第一个带有活动指示器的视图,以再次执行对数据库的查询。相反,它将返回到导航堆栈中显示的最后一个视图,该视图显示用户尚未下订单。每次都要执行对数据库的查询,以确保每次都刷新数据,这一点很重要


如果您能就如何最好地实现这一点提供意见,我将不胜感激。我正在使用故事板来完成所有这些。谢谢

您可以将orderHistoryNavController保留为选项卡栏中的viewController。在选项卡栏中保留对导航控制器的弱引用,然后覆盖UITabbar:didSelectViewController类似的内容

func tabBarController(tabBarController:UITabBarController,didSelect viewController:UIViewController){ orderHistoryNavController.popToRootViewController(否) }


每当选择新选项卡时,这将弹出到活动指示器(即使隐藏)。

您所说的“在选项卡栏中保留对导航控制器的弱引用”是什么意思?我保留弱引用只是为了方便从didSelectViewController中弹出它。您也可以从选项卡栏控制器的“viewControllers”出口获得它,例如:让orderHistoryNavController=tabBarController.viewControllers[orderHistoryTabIndex]为了澄清,func didSelect viewController是一个UITabBarControllerDelegate方法,因此我将UITabbarController子类化,使其成为自己的委托,在初始化时设置对导航控制器的引用(从故事板中的ViewController出口),然后每当选项卡更改时,弹出导航控制器引用。