【问题标题】:Display UIAlertView BEFORE didFinishLaunchingWithOptions completes?在 didFinishLaunchingWithOptions 完成之前显示 UIAlertView?
【发布时间】:2014-05-26 09:29:35
【问题描述】:

我的应用在 didFinishLaunchingWithOptions 中执行耗时的一次性初始化。我想显示一个警报 UIAlertView 来通知用户这种情况,但在 didFinishLaunchingWithOptions 完成之前不会显示警报,即使显示为 [alert performSelector:@selector(show) withObject:nil afterDelay:0.0];

将一次性初始化移动到后 didFinishLaunchingWithOptions 是不可能的,因为 didFinishLaunchingWithOptions 必须设置主窗口的根视图控制器,这需要初始化.在 didFinishLaunchingWithOptions 中设置一次性(虚拟)根视图控制器,稍后覆盖或替换,似乎有点……不雅。

想法?

【问题讨论】:

    标签: ios cocoa-touch uialertview


    【解决方案1】:

    我以前遇到过这个问题,使用一个特定的应用程序。

    解决它的唯一方法是使用“虚拟”根视图控制器。

    我所做的是用UIImageView 制作一个视图控制器,添加UIImageView 启动图像和一个活动指示器。

    请注意,活动指示器不必是UIActivityIndicatorView;活动指标只是一个概念。

    就我而言,我有一个标签和一个进度条。我会在加载过程中更新进度条,并更改标签文本以指示用户应用正在做什么。

    另外,我建议你不要使用警报视图;这是侵入性的。

    【讨论】:

    • 一个创意,但在didFinishLaunchingWithOptions 之后,您可能会或可能不会收到applicationDidBecomeActive,不幸的是在[self performSelector:@selector(didFinishLaunchingWithOptions_stage2) withObject:nil afterDelay:0.0] 之前,这会使与预期应用程序状态相关的控制流复杂化.哦,男孩...
    • @Gary - 这有点像第 22 条规则。我们需要 UI 来表明我们正在执行初始化 UI 的获取。 rtiago42 的想法不仅是一个好主意,而且是唯一的出路。我也不认为这不优雅。应用应始终向用户展示其状态,包括“我还不知道我的状态”状态。
    • @danh - iOS 确实应该区分基于框架的 UI(启动图像)和无框架 UI(在启动图像之上的 UIAlertView),就像大多数其他 UI 工具包一样 :)。
    • @rtiago42 - 只有在didFinishLaunchingWithOptionsapplicationDidBecomeActive(完全在前台的应用程序)之后,iOS 才会显示UIAlertView。应用程序初始化的第二阶段(主窗口根视图控制器更换)可以安排在applicationDidBecomeActive 中,以实现可预测的通知顺序。
    • @Gary 不要忘记applicationDidBecomeActive 可以在没有调用didFinishLaunchingWithOptions: 的情况下被调用;该应用程序可能来自后台。就个人而言,每当我觉得需要“启动画面”时,我都会让视图控制器负责设置新的根视图控制器。您可以将 SplashScreenController 设为应用程序的委托,这样做将使委托负责窗口的管理。
    猜你喜欢
    • 2012-01-18
    • 2019-09-08
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多