在呈现的ViewController / NavigationController上获取UITabBarController

时间:2017-04-11 12:49:34

标签: ios swift uinavigationcontroller uitabbarcontroller presentviewcontroller

我正在使用TabbarController

呈现一个导航控制器
let planSettingsVC = PlanSettingsViewController.instantiateFromStoryboard()
let planInfoNavCon = UINavigationController(rootViewController: planSettingsVC)

if let myTabBarVC = self.tabBarController as? MyPlanTabBarController {
        myTabBarVC.present(planInfoNavCon, animated: true, completion: nil)
}

PlanInfoNavCon出现了,现在我想访问提供它的TabBarController。

在图书馆找到:

open var tabBarController: UITabBarController? { get } // If the view controller has a tab bar controller as its ancestor, return it. Returns nil otherwise.

所以我在PlanSettingsViewController

上尝试了以下内容
  1. print(self.tabBarController)打印 nil

  2. print(self.presentingViewController.tabBarController)打印 nil

  3. print(self.navigationController?.presentingViewController?.tabBarController)打印 nil

  4. print(self.navigationController.tabBarController)打印 nil

  5. self.navigationController?.presentingViewController as? MyPlanTabBarController结果 nil

  6. 我可以通过self.tabBarController访问TabBar的ViewController上的TabBarController,但

    如何访问显示此内容的TabBarController?

    P.S。

    po self.navigationController返回<UINavigationController>po self.navigationController?.presentingViewController返回<UIViewController>

    lldb

1 个答案:

答案 0 :(得分:0)

此代码:

if let myTabBarVC = self.tabBarController as? MyPlanTabBarController {
        myTabBarVC.present(planInfoNavCon, animated: true, completion: nil)
}

说:&#34;来自 self.tabBarController&#34;

的planInfoNavCon

好奇......似乎NavController中的每个VC都认为自己呈现NavController的控制器...所以......

您仍然不需要额外的.tabBarController部分,但您也不需要获取导航控制器的参考。

此代码在PlanSettingsViewController中的当前 VC中,应该获得对tabBarController的正确引用:

var thePresenter = self.presentingViewController as? MyPlanTabBarController

因此,要从planInfoNavCon获取对tabBarController的引用,您需要获取其演示者

var thePresenter = self.navigationController?.presentingViewController

您不想要额外的.tabBarController部分(可能需要其他?解包 - 我实际上并没有运行此代码)。