出现 modalViewController 的问题
Posted
技术标签:
【中文标题】出现 modalViewController 的问题【英文标题】:Problem with getting a modalViewController to appear 【发布时间】:2011-02-18 05:08:42 【问题描述】:我已经为此奋斗了好几个小时。我到处搜索,似乎找不到解决我问题的方法。我很确定我只是在这里缺少一些关键概念。
我的 AppDelegate (didFinishLaunching) 基本上设置了我的窗口并调用 RootViewController:
// 创建我们的窗口 UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [窗口设置背景颜色:[UIColor blackColor]]; // 创建我们的根视图控制器 RootViewController *controller = [[RootViewController alloc] init]; // 将我们的 rootviewcontroller 的视图添加到我们的窗口 [窗口 addSubview:controller.view]; // 控制器现在归窗口视图所有 [控制器释放]; // 向世界展示我们 [窗口 makeKeyAndVisible];当我将controller.view 添加为窗口的子视图时,我的理解是RootVC 的loadView 会自动被调用。
在 RootVC loadView 中,我创建了一个 tabBarController,每个选项卡都有一个 navigationController 和它自己的 viewController。一切正常。
在 RootVC viewDidLoad 中,我正在检查这是否是用户第一次运行此应用程序,如果是,我想弹出一个模态欢迎屏幕。这是我遇到问题的部分。
我希望在 RootVC 的 viewDidLoad 方法中保留尽可能多的代码,并且理想情况下能够通过以下方式完成我想要的:
WelcomeViewController *welcome = [[WelcomeViewController alloc] init]; [自我presentModalViewController:欢迎动画:真]; [欢迎发布];显然这是行不通的。 WelcomeVC 的 loadView 还没有运行,因为我没有明确设置它的 view 属性。我玩过一堆不同的解决方案(welcome.view - [[UIView ....],使用 WelcomeVC 的 init 方法设置 self.view),但我似乎无法让该模式弹出。
我应该如何完成我正在寻找的东西?什么是最佳实践,以及使我的代码保持紧凑和整洁的最佳解决方案是什么?
我被困住了,所以希望你的解决方案能让我继续开发我的应用程序!
【问题讨论】:
与你的问题无关,我认为 [window addSubview:controller.view] 不会保留视图控制器。 @MHC - 你能详细说明一下吗?为什么你这么想?我认为每当视图添加子视图时,该子视图都会被保留。 子视图被保留,但不是它的视图控制器。 【参考方案1】:虽然问题没那么简单,但解决办法却是。您必须等到主视图出现。所以检查条件并在viewDidAppear
方法中显示您的模态视图,而不是在viewDidLoad
方法中。
【讨论】:
原来我的代码中还有其他问题,但您的解决方案是我需要修复的最后一件事,它奏效了!知道为什么必须等待主视图出现而不是加载吗?这在任何文档的任何地方都有说明吗? 在 Apple 的文档中说“有点像”,说在“当前视图控制器”中使用presentModal...
方法。但据我所知,“当前视图控制器”并未在任何地方定义。然而,考虑到它的行为(模态呈现的视图在呈现视图的顶部),呈现视图可能与它自己的视图的父视图一起使用。因此,它自己的视图需要正确插入到视图层次结构中,然后才能以模态方式呈现其他视图控制器。以上是关于出现 modalViewController 的问题的主要内容,如果未能解决你的问题,请参考以下文章
从 UISplitViewController 呈现的 modalViewController 出现方向错误
调用[tableView reloadData];在 modalViewController 的 viewController 上
从另一个 modalviewcontroller 关闭 modalviewcontroller
从另一个 modalviewcontroller 呈现 ModalViewcontroller