iOS-为什么可以';我不能用同样的方法使用pushViewController两次吗?
我目前有三个视图控制器:iOS-为什么可以';我不能用同样的方法使用pushViewController两次吗?,ios,objective-c,xcode,Ios,Objective C,Xcode,我目前有三个视图控制器:ViewController1 ViewController2和ViewController3。我试图在ViewController1和ViewController2之间以及ViewController2和ViewController3之间传递数据 例如,要将数据user从ViewController1传递到ViewController2我使用: ViewController2 *vc2 = [[ViewController2 alloc]init]; vc2.user
ViewController1 ViewController2
和ViewController3
。我试图在ViewController1
和ViewController2
之间以及ViewController2
和ViewController3
之间传递数据
例如,要将数据user
从ViewController1
传递到ViewController2
我使用:
ViewController2 *vc2 = [[ViewController2 alloc]init];
vc2.user = _user;
[self.navigationController pushViewController:vc2 animated:YES];
但是,如果我试图从ViewController2
和ViewController3
传递user
,我无法使用上述方法…我只会在屏幕上显示一个黑色的视图控制器
相反,我尝试了这个方法,效果很好:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];
vc3.user = _user;
[self.navigationController pushViewController:vc3 animated:YES];
为什么我不能使用与vc1->vc2相同的方法
ViewController3 *vc3 = [[ViewController3 alloc]init];
vc3.user = _user;
[self.navigationController pushViewController:vc3 animated:YES];
之所以会出现黑屏,是因为您使用的实例化方法
ViewController2 *vc2 = [[ViewController2 alloc]init];
这成功地创建了一个视图控制器,但遗憾的是,它没有视图(您没有给它视图)。导航控制器将无视图视图控制器添加到其堆栈中,从而为上一个控制器设置动画。由于导航控制器的默认背景色为黑色,并且俯视图控制器不存在,因此您正体验应该显示的内容:无
第二种方法之所以有效,是因为故事板正在实例化视图控制器,但这次它有一个实际视图:
ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];
首先,正如@Wayne Hartman所说,您必须启动viewController
ViewController2 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
vc.user = _user;
[[self navigationController] pushViewController:vc animated:YES];
现在,在ViewController2
和ViewController3
变量中,user
“必须具有@属性
和@合成
@property(nonatomic, copy) NSString *user;
@synthesize user;
现在,您可以在ViewController3
中导航,与ViewController2
ViewController3 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController3"];
vc.user = user;
[[self navigationController] pushViewController:vc animated:YES];
您可以从Storyboard>Identity inspector
您可以使用此代码
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
您是否可能输入错误并试图推送导航堆栈上已经存在的视图控制器?这会导致你描述的行为。肯定是打字错误。你能把代码也贴出来吗?@AaronBrager不,我没有!我已经检查了数百次,没有发现任何错误……您确定正确实例化了ViewController3(我的意思是,与您在第二个代码块中尝试的方法不同)?代码您是否发布了显示初始实例化的代码块?@LyndseyScott等等,我如何正确初始化ViewController3?我试过:ViewController3*vc3=[[ViewController3 alloc]init]代码>