【问题标题】:How do I instantiate navigationController while passing data to viewController?如何在将数据传递给 viewController 时实例化 navigationController?
【发布时间】:2020-05-12 22:45:14
【问题描述】:

所以我有一个tabBar。单击某个选项卡会将用户带到嵌入在navigationController 中的viewController。为了包含navigationController,我使用

实例化viewController
myViewController = [storyboard instantiateInitialViewController];

而不是

myViewController = [storyboard instantiateViewControllerWithIdentifier:@"myID"];

后面的代码推送viewController但没有navigationController

这很好,直到我想将数据传递给实例myViewController。问题是,我不能使用引用初始viewController(即navigationController)的实例传递数据,但我可以使用直接引用myViewController 的实例来传递数据。换句话说:

这是为了获取数据(但没有navigationController):

viewController = [storyboard instantiateViewControllerWithIdentifier:@"experienceID"];
((ExperiencesListViewController*)viewController).experiences = self.experiences;

如果我尝试添加数据,这会崩溃,但如果我排除设置数据,则会给我一个navigationBar

viewController = [storyboard instantiateInitialViewController];
((ExperiencesListViewController*)viewController).experiences = self.experiences;

希望我能很好地解释这一点。如果有什么我需要澄清的,请告诉我。

编辑 我的第一个想法是使用prepareSegue,但在tabs 之间移动时似乎不会触发。另一个想法是通过实例以某种方式访问​​myViewController,但不确定如何。

【问题讨论】:

    标签: ios objective-c uiviewcontroller uinavigationcontroller instantiation


    【解决方案1】:

    这是因为该特定故事板的初始 UIViewControllerUINavigationController

    获得所需 VC 的一种简单方法是通过调用获得这样的UINavigationController

    navController = [storyboard instantiateInitialViewController];
    

    就像你做的那样,然后:

    navController.childViewControllers[0]
    

    这将返回该特定导航控制器的第一个 VC(当然,假设它仅包含它所嵌入的 VC),这可能是您的 ExperiencesListViewController

    【讨论】:

    • 啊,真是个不错的家伙,它就像一个魅力。正是我需要的。非常感谢! :D 认为应该是.childViewControllers[0]。仅使用 .viewControllers[0] 对我不起作用。可能是客观 c/swift 的东西,不知道。
    • 哦,我的错,我发帖时想到了Swift。将改变它 - 感谢您的信息
    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 2016-03-04
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多