【问题标题】:Why is the modal view controller not being presented in applicationDidFinishLaunchingWithOptions?为什么在 applicationDidFinishLaunchingWithOptions 中没有显示模态视图控制器?
【发布时间】:2012-02-02 23:21:20
【问题描述】:

每当应用程序运行时,我的应用程序都会显示一个模态视图控制器(密码输入表单)。我在两个应用程序委托方法中展示了视图控制器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self.window.rootViewController presentModalViewController:self.passcodeViewController animated:NO];
    //...
    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!self.passcodeViewController.view.window) {
        [self.window.rootViewController presentModalViewController:self.passcodeViewController animated:NO];
    }
}

application:didFinishLaunchingWithOptions: 方法中呈现模态视图控制器的调用不会呈现视图控制器,而applicationDidBecomeActive: 中的调用会呈现视图控制器。这是为什么呢?

编辑:根据下面的 cmets,我想提一下,我正在使用 Storyboard 并且 self.window.rootViewController 确实指向一个对象(基本上,它不是 nil)

【问题讨论】:

  • rootViewController 是如何分配给窗口的?主窗口.xib?故事板?我的猜测是在 didFinishLaunchingWithOptions 中尚未分配 self.window 或 self.window.rootViewController。
  • storyboard - 我忘了提到 self.window.rootViewController 确实指向一个视图控制器,即。这不是零

标签: iphone objective-c ios ipad modalviewcontroller


【解决方案1】:

来自UIApplicationDelegate 协议手册参考:

在您的应用程序启动后调用它的主 nib 文件已加载。在调用此方法时,您的 应用程序处于非活动状态。

【讨论】:

  • 如果主笔尖(或者在我的情况下是故事板)已经加载。那么为什么调用在这个视图之上添加另一个视图不起作用呢?
  • 嗯,所以问题不在于您想要调用该方法吗?我想你已经尝试添加一个NSLog 语句来查看它的确切调用时间。不显示视图的原因是因为 NavigationController 不是当前响应者,或者它可能正在显示,但在视图的另一层或层次结构级别。
猜你喜欢
  • 2015-10-15
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2021-02-01
  • 1970-01-01
相关资源
最近更新 更多