如何从内容 ViewController 呈现 UIViewController?
Posted
技术标签:
【中文标题】如何从内容 ViewController 呈现 UIViewController?【英文标题】:How to present UIViewController from content ViewController? 【发布时间】:2014-02-01 09:12:53 【问题描述】:我得到了 menuVC,其中包含其他 VC 的组合,其中之一是 loginViewController,如何从 menuVC 转到 loginViewController?或者这是从方法加载 VC 的最佳方式?我的代码:
MenuViewController * menuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MenuViewController"];
[menuViewController presentViewController:menuViewController.loginViewController animated:YES completion:nil];
我可以这样做:
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MenuViewController * menuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MenuViewController"];
[menuViewController showLoginViewController];
出现错误:警告:尝试显示不在窗口层次结构中的视图!
【问题讨论】:
你必须导航到任何一个 【参考方案1】:当应用程序尚未呈现在视图中时,您不能以模态方式呈现视图控制器。您可以在菜单视图控制器的 viewDidAppear 方法中呈现它。您必须在 viewDidAppear 而不是在 viewDidLoad 或 viewWillAppear 中执行此操作,因为您在其上呈现它的视图不在当前窗口层次结构中,基本上与您在应用程序委托中执行此操作时遇到的问题相同。如果您希望它在应用程序启动时已经显示,只需选择设置动画为否。如果您需要更多帮助,请告诉我。
【讨论】:
那么,如果我想拥有 menuVC 并在所有应用程序运行时从它加载其他 VC,我应该怎么做? 如果您试图在菜单视图控制器的顶部显示登录屏幕,只需在菜单视图控制器中有一个布尔值在您登录后以这种方式登录,将其设置为 true,以便视图每次视图出现时控制器都不会显示。内部菜单视图控制器调用 [self.view presentViewController:loginViewController animated:NO completion:nil];在 viewDidAppear 中,它将在运行时首先显示 我使用了这种方法,但现在我从 AppDelegate 运行我的 loginVC 仅当用户未保存在 Keychain 中或从 menuVC 时用户注销。我需要一些架构方面的帮助,我的应用程序将包含一个 menuVC、其他 VC 和一些非 VC 类。我想从菜单 VC 运行所有 VC 或使用方法委托它,如果菜单中没有这样的 VC,我将从 menuVC 运行它。我说的对吗? 这真的不是问题。只需像我之前在 menuVC 和 applicationDidFinishLaunching 内的应用程序委托中所说的那样创建一个全局布尔值,只需将布尔值 (isLoggedIn) 设置为 YES 以不显示它,NO 以显示它。在调用 menuVC 的 viewDidAppear 之前,将调用应用程序委托 applicationDidFinishLaunching。以上是关于如何从内容 ViewController 呈现 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 iOS 中的两个条件从 AppDelegate 呈现两个不同的 ViewController?
iOS 如何从 Uiview 呈现 Modal ViewController
swift3:如何将 xib 呈现给 viewcontroller
当用户按下主页按钮但在应用程序进入后台之前,如何从应用程序窗口的 rootViewController 呈现 viewController? [复制]