【发布时间】:2016-10-05 08:44:54
【问题描述】:
我的应用程序的application(_:didFinishLaunchingWithOptions:launchOptions:) 正在创建一个overlay,如下所示:
window.makeKeyAndVisible()
let launchStoryboard = UIStoryboard(name: "LaunchScreen", bundle: nil)
let overlayView = launchStoryboard.instantiateInitialViewController()!.view!
window.addSubview(overlayView)
在Main.storyboard 中定义的应用的初始视图控制器是UITabBarController,其第一个选项卡包含UINavigationController。其根视图控制器的viewDidLoad() 调用EKEventStore.authorizationStatus(for:)。
此时,应用程序似乎停止运行,只有覆盖层可见。当我停止应用程序时,会出现询问是否应允许应用程序访问日历的对话框。它显然隐藏在叠加层之下。
如何确保对话框出现在屏幕的最前面,以便用户有机会回答其实际问题?
更新以下是有关一般上下文的更多信息以回答问题:应用程序委托中的代码的原因是——除非它发生在以前的启动中——我需要提示用户输入服务器凭据,从服务器获取数据并将其中一些数据存储在EKEvents 中。覆盖层支持显示视图控制器以获取用户的凭据(请参阅here)。当从服务器接收到数据时,覆盖将被删除。调用makeKeyAndVisible 是必要的,以便UIApplication.shared.keyWindow 在应用程序生命周期的早期阶段获得价值。该值是呈现所述视图控制器以获取凭据所必需的。
【问题讨论】:
-
您确定在 LaunchScreen 故事板中有这个选项卡视图控制器吗?它通常只包含启动屏幕(顾名思义),其余的将在主故事板中...您是否尝试在视图控制器中设置断点以查看它是否到达那里?
-
@kender 不,标签视图控制器不在 LaunchScreen 故事板中,而是在 Main.storyboard 中(参见编辑)。
-
那么您的 AppDelegate 中的代码的原因是什么?您是否随时删除叠加层?如果不让覆盖窗口生成KeyAndVisible 怎么办?
-
@kender 我更新了 Q 以回答您提出的问题。 (所有这些都一直有效,所以一般的方法可能是合理的。)
标签: ios overlay ios10 eventkit