如何将数据从视图控制器传递到标签栏控制器以及导航控制器?

Posted

技术标签:

【中文标题】如何将数据从视图控制器传递到标签栏控制器以及导航控制器?【英文标题】:How to pass data from viewcontroller to tabbarcontroller to navaigationcontroller? 【发布时间】:2013-09-04 10:23:14 【问题描述】:

您好,我是 iphone 开发新手,我正在使用故事板做我的项目, 在我的项目中,我有登录 viewController,如果登录成功,它将转到 tabbarcontroller。在 tabbarController 中,它具有三个 viewController。在 tabbarController 和三个视图控制器之间我有一个导航控制器。现在的问题是我必须从 loginviewController 到 tabBarcontroller 到 navigationController 。我不知道该怎么做请帮助我..提前谢谢 我使用此代码将数据从登录控制器传递到 tabbarcontroller

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    NSString * segueIdentifier = [segue identifier];
    if([segueIdentifier isEqualToString:@"dashboard"])

        EventdashViewController *dc = [[EventdashViewController alloc] init];
        FeedDashViewController *fc = [[FeedDashViewController alloc]init];
        NewsDashViewController *nc = [[NewsDashViewController alloc]init];
        UITabBarController* tbc = [segue destinationViewController];
        dc = (EventdashViewController *)[[tbc customizableViewControllers] objectAtIndex:0];
        dc.memberid = userid1;
        NSLog(@"%d",dc.memberid);
        fc = (FeedDashViewController *) [[tbc customizableViewControllers]objectAtIndex:1];
        fc.memberid=userid1;
        NSLog(@"%d",fc.memberid);
        nc = (NewsDashViewController *)[[tbc customizableViewControllers]objectAtIndex:2];
        nc.memberid = userid1;
        NSLog(@"%d",nc.memberid);
    

如何将数据从viewcontroller传递到tabbarcontroller到navigationcontroller?

【问题讨论】:

“在 tabbarController 和三个视图控制器之间我有一个导航控制器”是什么意思?? 在 tabbarcontroller 中我有三个视图控制器 eventviewcontroller、feedbackviewcontroller 和 newsletterviewcontroller 在情节提要中的流程将像 loginview 到 tabbarcontroller 然后三个导航控制器为三个 viewcontrollers.. 希望你理解 只需给出一个 TabbarController 的故事板 id。并用它来segue或传递数据.. ETC 好的。然后您将需要自定义这些导航控制器。我的意思是自定义类。您可以遍历 tabbarcontroler 的子控制器(您的三个导航控制器),将此循环中的子控制器类型转换为导航控制器类(您的自定义类)。然后以您在代码中所做的类似方式设置该自定义控制器中的值,即“dc.memberid = userid1;”。如果你不明白任何一点,请告诉我,我会尽力解释。 【参考方案1】:

首先,看起来您正在尝试将数据传递给导航控制器(dc、fc 和 nc)的根视图控制器,而不是导航控制器,这是您应该做的。问题是,customizableViewControllers 将返回导航控制器,而不是它们的根视图控制器。此外,您使用 alloc init 的三行是错误的,而且无论如何都没用,因为您重新定义了 dc、fc 和 nc 是几行之后的内容——如果您在情节提要中设置了这一切,则标签栏控制器的当标签栏控制器被实例化时,内容控制器都会被实例化。你应该拥有的是:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    NSString * segueIdentifier = [segue identifier];
    if([segueIdentifier isEqualToString:@"dashboard"])

        UITabBarController* tbc = [segue destinationViewController];
        dc = (EventdashViewController *)[(UINavigationController *)tbc.viewControllers[0] topViewController];
        dc.memberid = userid1;
        NSLog(@"%d",dc.memberid);
        fc = (FeedDashViewController *) [(UINavigationController *)tbc.viewControllers[1] topViewController];
        fc.memberid=userid1;
        NSLog(@"%d",fc.memberid);
        nc = (NewsDashViewController *)[(UINavigationController *)tbc.viewControllers[2] topViewController];
        nc.memberid = userid1;
        NSLog(@"%d",nc.memberid);
    

【讨论】:

请帮我回答这个问题。 ***.com/questions/18740570/…

以上是关于如何将数据从视图控制器传递到标签栏控制器以及导航控制器?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从标签栏控制器传递到 swift 和 xcode 中的视图控制器

使用标签栏和导航实例化深度视图控制器

如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图

标签栏控制器应该如何集成到导航控制器工作流程中?

从导航栏视图控制器导航到标签栏视图控制器

如何导航到嵌入在标签栏控制器中的视图控制器