iOS - 为什么我不能以相同的方式使用 pushViewController 两次?

标签 ios objective-c xcode

我目前有三个 View Controller :ViewController1 ViewController2ViewController3。我试图在 ViewController1ViewController2 之间以及 ViewController2ViewController3 之间传递数据。

例如,要将 user 持有的数据从 ViewController1 传递到 ViewController2,我使用:

ViewController2 *vc2 = [[ViewController2 alloc]init];
vc2.user = _user;    

[self.navigationController pushViewController:vc2 animated:YES];

但是如果我尝试从 ViewController2ViewController3 传递 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/

相关文章:

iphone - 如何在动画时获取项目的坐标?

ios - 如何使用 Swift 从 Xcode 中的代码访问预处理器宏?

ios - tableView 对象获取其他对象的属性 - 如何解决它?

ios - 如何在 ios-chart 上隐藏 0 值?

ios - Xcode 4.5 空符号标识

iphone - 如何使用SFHFKeyChainUtils?

objective-c - 在init方法中确定类

iphone - 使 iPhone 特定的应用程序在 iPad 上运行以满足 Apple 要求

xcode - 仅按住 Control 键拖动到 AppDelegate

ios - drawRect - 绘制星形