我仍然没有用下面的结构来掌握这种转移。我看了很多帖子,并且看到了其他人没有回复的帖子,但没有解决。
我会尝试简化问题,让所有人都更轻松。
该项目的结构是: 带有tab1和tab2的UITabbar
Tab1有一个导航控制器 - > ViewController1
Tab2有一个导航控制器 - > ViewController2
在viewcontroller1(tab1)中,我有对象X。
在ViewCOntroller2(tab2)中,我想显示对象X。
不要担心显示,这是最简单的部分。
问题:如何将对象X从tab1传递给tab2。 (一般模式是什么)。
如果你想使用prepareForSegue来做,这是好的,还是有更好的方法。
如果使用prepareForSegue,你将segue拖到哪里?
tabbarcontroller
OR ***** 2.到第二个VC
希望这很清楚。考虑到这一点,您将如何进行转移?
使用segue 1:
我试过这样做:
//(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传输是如何完成的? 提前谢谢
答案 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文件。