我正在使用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
print(self.tabBarController)
打印 nil
print(self.presentingViewController.tabBarController)
打印 nil
print(self.navigationController?.presentingViewController?.tabBarController)
打印 nil
print(self.navigationController.tabBarController)
打印 nil
self.navigationController?.presentingViewController as? MyPlanTabBarController
结果 nil
我可以通过self.tabBarController
访问TabBar的ViewController上的TabBarController,但
如何访问显示此内容的TabBarController?
P.S。
po self.navigationController
返回<UINavigationController>
,po self.navigationController?.presentingViewController
返回<UIViewController>
答案 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
部分(可能需要其他?
解包 - 我实际上并没有运行此代码)。