我目前有三个 View Controller :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
,我就不能使用上面的方法...我只是得到黑色 View Controller 出现在屏幕上。
相反,我尝试了这个并且它有效:
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];
这成功地创建了一个 View Controller ,但是,唉,它没有 View (你没有给它一个)。导航 Controller 会将无 View View Controller 添加到其堆栈中,从而使前一个 Controller 动画化。由于导航 Controller 的默认背景颜色是黑色,而顶 View Controller 不存在,那么您遇到的正是应该出现的情况:什么都没有。
第二种方法之所以有效,是因为 Storyboard正在实例化 View Controller ,但这次它有一个实际 View :
ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];
关于iOS - 为什么我不能以相同的方式使用 pushViewController 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865410/