使用TABBarController时将数据传递给View Controllers的一般方法

时间:2013-01-17 16:05:26

标签: ios uitabbarcontroller

我仍然没有用下面的结构来掌握这种转移。我看了很多帖子,并且看到了其他人没有回复的帖子,但没有解决。

我会尝试简化问题,让所有人都更轻松。

该项目的结构是: 带有tab1和tab2的UITabbar

Tab1有一个导航控制器 - > ViewController1

Tab2有一个导航控制器 - > ViewController2

在viewcontroller1(tab1)中,我有对象X。

在ViewCOntroller2(tab2)中,我想显示对象X。

不要担心显示,这是最简单的部分。

enter image description here

问题:如何将对象X从tab1传递给tab2。 (一般模式是什么)。

如果你想使用prepareForSegue来做,这是好的,还是有更好的方法。

如果使用prepareForSegue,你将segue拖到哪里?

  1. tabbarcontroller

    enter image description here

  2. OR ***** 2.到第二个VC enter image description here

    希望这很清楚。考虑到这一点,您将如何进行转移?

    使用segue 1: enter image description here

    我试过这样做:

    //(From View controller 1)
    
        - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
        {
        if ([segue.identifier isEqualToString:@"CreateObjectXToDisplayObjectX"])
    
                ViewController2* vc2 = [[ViewController2 alloc] init];
                UITabBarController* tbc = [segue destinationViewController];
                vc2 = (ViewController2 *)[[tbc customizableViewControllers] objectAtIndex:1];
        //Crash here with with [MainNavigationControllerDesign setViewController1Delegate:]: unrecognized selector sent to instance 0x1064ef70'
                vc2.viewController1Delegate=self;
                vc2.objectXAtViewController2 = _objectXFromViewController1;
            }
        }
    

    那么,这个Object X传输是如何完成的? 提前谢谢

1 个答案:

答案 0 :(得分:1)

您不希望以这种方式使用segues。 Segues在您访问时始终会实例化新控制器,但您已将这些控制器嵌入到选项卡栏控制器中。如果你在代码中设置它,我会说使用委托,但如果你在IB中设置它,那很难做到。从VC2,您可以使用self.tabBarController.viewControllers [0]获取对VC1导航控制器的引用。 VC1将是导航控制器的topViewController,因此,将它们放在一起,并添加一个演员,您可以像这样访问VC1:

ViewController1 *vc1 = (ViewController1 *)[self.tabBarController.viewControllers[0] topViewController];

获得该引用后,您可以访问任何vc1的属性。不要忘记将ViewController1.h导入ViewController2的.m文件。