【问题标题】:Get UITabBarController on presented ViewController/NavigationController在呈现的 ViewController/NavigationController 上获取 UITabBarController
【发布时间】:2017-04-11 12:49:34
【问题描述】:

我正在展示来自 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 结果

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

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

附言

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

【问题讨论】:

    标签: ios swift uinavigationcontroller uitabbarcontroller presentviewcontroller


    【解决方案1】:

    这段代码:

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

    说:“当前 planInfoNavCon 来自 self.tabBarController”

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

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

    这段代码,在PlanSettingsViewControllercurrent VC 中,应该获得对tabBarController 的正确引用:

    var thePresenter = self.presentingViewController as? MyPlanTabBarController
    

    所以,要从 planInfoNavCon 中获取对 tabBarController 的引用,您需要获取它的 presenter

    var thePresenter = self.navigationController?.presentingViewController
    

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

    【讨论】:

    • 我试过这个。 self.navigationController?.presentingViewController as? MyPlanTabBarController 返回零
    • 您是否已在 Debug 中逐步检查这些值?您确定 self.navigationController 在那时有效吗?如果您将其转换为as? MyPlanTabBarController,那么self.navigationController?.presentingViewController 的值/类是什么?
    • 是的,我处于调试模式。 po self.navigationController 返回 <UINavigationController>po self.navigationController?.presentingViewController 返回 <UIViewController>。当我尝试将其转换为 TabBarController 时失败
    • 有趣...查看我的编辑。适用于我的快速测试。
    • 对我来说,当我尝试转换为 MyPlanTabBarController 时它返回 nil。编辑问题以包括屏幕截图。
    猜你喜欢
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多