我目前有三个视图控制器:ViewController1 ViewController2
和ViewController3
。我正在尝试在ViewController1
和ViewController2
之间以及ViewController2
和ViewController3
之间传递数据。
例如,要将数据user
保留从ViewController1
传递到ViewController2
我使用:
ViewController2 *vc2 = [[ViewController2 alloc]init];
vc2.user = _user;
[self.navigationController pushViewController:vc2 animated:YES];
但如果我尝试从user
和ViewController2
传递ViewController3
,我就无法使用上述方法...我只是在屏幕上显示黑色视图控制器。< / p>
相反,我试过这个并且它有效:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];
vc3.user = _user;
[self.navigationController pushViewController:vc3 animated:YES];
为什么我不能使用与vc1相同的方法 - &gt; VC2?
ViewController3 *vc3 = [[ViewController3 alloc]init];
vc3.user = _user;
[self.navigationController pushViewController:vc3 animated:YES];
答案 0 :(得分:2)
您获得黑屏的原因是因为您使用的方法来实例化它。
ViewController2 *vc2 = [[ViewController2 alloc]init];
这成功创建了一个视图控制器,但是,它没有视图(你没有给它一个)。导航控制器将无视图视图控制器添加到其堆栈,为以前的控制器设置动画。由于导航控制器的默认背景颜色为黑色且顶视图控制器不存在,因此您正在体验应该显示的内容:无。
你的第二个方法有效的原因是故事板正在实例化视图控制器,但这次它有一个实际的视图:
ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];
答案 1 :(得分:0)
首先你必须发起你的viewController,因为@Wayne Hartman说..
ViewController2 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
vc.user = _user;
[[self navigationController] pushViewController:vc animated:YES];
现在,您的ViewController2
和ViewController3
变量“user
”必须有@Property
和@synthesize
@property(nonatomic, copy) NSString *user;
@synthesize user;
现在,您可以使用与ViewController3
ViewController2
导航
ViewController3 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController3"];
vc.user = user;
[[self navigationController] pushViewController:vc animated:YES];
您可以从ViewController Identifier
Storyboard > Identity inspector
答案 2 :(得分:0)
您可以使用此代码
NSMutableArray* array = [self.navigationController viewControllers];
FirstViewController* viewFirst = [array objectAtIndex:0];
// Get the third / second or any view controller using its order of insertion / push
// If you know th order then
ThirdViewController* thirdView = [array objectAtIndex:2];
thirdView.view.backgroundColor = viewFirst.view.backgroundColor;
如果不起作用
您可以使用NSNotification
执行任务