0

获取的UITabBarController我从TabbarController上呈现的ViewController/NavigationController

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)打印

  2. 以下个打印

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

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

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

我能够访问TabBar的ViewController TabBarController self.tabBarController

如何访问TabBarController提出了这个?

P.S.

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

lldb

回答

0

此代码:

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

说: “目前planInfoNavCon self.tabBarController”

好奇...它se EMS每个VC在NavController认为自己通过呈现该呈现的NavController控制器...所以...

你仍然不需要额外的.tabBarController的一部分,但你也不需要得到参考导航控制器。

此代码,在当前 VC在PlanSettingsViewController,应该得到适当的参考tabBarController:

var thePresenter = self.presentingViewController as? MyPlanTabBarController 

因此,要获得一个参考tabBarController从planInfoNavCon,你想获得它的主持人

var thePresenter = self.navigationController?.presentingViewController 

你不想额外.tabBarController部分(可能需要其他?展开 - 我实际上并没有运行这个代码)。

+0

我试过这个。 'self.navigationController?.presentingViewController as? MyPlanTabBarController'返回nil – sasquatch

+0

您是否在调试中检查了值?你确定self.navigationController在那个时候是有效的吗?如果你*不把它当作? MyPlanTabBarController','self.navigationController?.presentingViewController'的值/类是什么? – DonMag

+0

是的,我处于调试模式。 'po self.navigationController'返回''和'po self.navigationController?.presentingViewController'返回''。当我尝试将它转换为TabBarController – sasquatch