iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器
Posted
技术标签:
【中文标题】iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器【英文标题】:iOS: presentViewController error Presenting view controllers on detached view controllers is discouraged 【发布时间】:2017-05-10 22:49:35 【问题描述】:我正在尝试以编程方式呈现 viewController:
- (void)viewDidLoad
[super viewDidLoad];
NewViewController *vc = [[NewViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
但是我收到了这个错误:
Presenting view controllers on detached view controllers is discouraged
而且我在 iPhone 上也出现黑屏。
这就是我的故事板和 iPhone 的样子:
任何人都知道我为什么会收到此错误以及为什么会出现黑屏?
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:您正试图在viewDidLoad
中显示视图控制器。在从 Storyboard 加载 View Controller 的视图时调用此方法。此时 View Controller 尚未显示,因此从应用程序的视图中分离。
您可能会因为此错误而出现黑屏。
要解决这个问题在viewDidLoad
中不调用presentViewController
,请在视图显示后稍后调用。例如,您可以在视图控制器的viewDidAppear
方法中调用它。
【讨论】:
我将其更改为 viewDidApper 并且我没有错误但仍然有黑屏。有什么想法吗? 您检查过视图调试器中显示的内容吗?有没有给NewViewController
的相关方法加断点看是否显示正确?
是的,所有的方法都被调用了。 viewWillAppear 和 viewDidLoad 和 viewDidAppear。但是屏幕是黑的
您通常不会使用 [[NewViewController alloc] init]; 创建视图控制器;视图是如何创建的?
是的,这就是问题所在。因为你使用 Storyboard,为什么不使用 segue?如果您不想看,可以查看this SO answer,了解如何从 Storyboard 正确创建视图控制器。以上是关于iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
PresentViewController 在 iOS 中隐藏导航栏
PresentViewController iOS 上的 PushView
如何使用 presentViewController 呈现 iOS 键盘扩展
PresentViewController 与 ModalPresentationStyle “UIModalPresentationFormSheet” IOS 8