【问题标题】:Presenting full screen "modal" loading view呈现全屏“模态”加载视图
【发布时间】:2012-02-08 09:56:37
【问题描述】:

我的应用的视图层次结构有一个根UINavigationController,其中有一个包含UIWebViewUIViewController 子类。应用程序启动后,我希望使用全屏加载视图控制器隐藏整个导航控制器视图,直到调用 Web 视图完成加载委托方法。

为了实现这一点,我考虑了两种方法中的一种,但都不是“感觉正确”:

  • 将子视图添加到 UINavigationController 视图 - 干涉导航控制器的视图感觉非常不便
  • 从根级别呈现一个模态视图控制器 - 我必须等到viewDidAppear 才能调用它,这会在显示之前导致下部 VC 的丑陋闪烁。反过来,在某些情况下,加载 VC 会呈现其自己的模态,这意味着我将在根 VC 之上的模态之上有一个模态。

我是不是快疯了,或者这不是实现这个应用程序流程的特别简单的方法?

【问题讨论】:

    标签: iphone ios ipad uikit


    【解决方案1】:

    有点“优雅”的方法:创建一个包含 UIWebView 的共享单例类,该类需要在启动应用程序时加载并启动请求。同时,显示预加载器屏幕(应用程序启动时添加到导航堆栈的第一件事)。请求完成加载后,通过 NSNotification 中心发布通知,导致 AppDelegate 推送/切换到加载的 UIWebView 控制器。

    【讨论】:

    • 这是最优雅的解决方案,可以在 UIViewController 之间“共享”Web 视图,并在适当的时候换出窗口的 rootViewController。
    【解决方案2】:

    你有必要用 UIWebView 完全隐藏后台发生的事情吗?阻塞活动指示器是否不足以实现这种用户体验?如果是这样,我建议使用在线提供的许多不错的活动指示组件之一,例如 MBProgressHUD

    【讨论】:

    • 老实说,我同意你的看法——但我正在尝试实现一个客户的设计,该设计要求全屏显示图形(基本上是一个 UIViewController,它复制了 Default.png 看起来的优雅设置期间的过渡)。
    • 客户将是我们的终结......确保他知道“优雅”不能以这种方式实现:) 你可以添加一个子视图到你的 [UIApplication sharedApplication].keyWindow - make确保在推动视图控制器之前执行此操作(因为这会阻碍导航动画,这可能看起来很难看,但您可以将其添加为子视图,然后对其位置/alpha 进行动画处理以使其看起来更好一些)。确保保存对它的引用,以便在 Web 视图完成加载后关闭它
    • Spooky,这是自从阅读您的最后一条评论后我的想法发生了变化!我对此的担忧一直是有多个视图控制器在运行——尽管如果这个加载的 VC 故意阻止了另一个的可见性,这真的是一个问题吗?
    • 我对整个(iOS5 之前的容器)的理解是每个“屏幕”有 1 个 ViewController。除此之外,响应者堆栈会变得很糟糕,不知道要向哪个 VC 报告事件。也就是说,如果我创建了真正的根 window.rootViewController,我在 UIWindow 的子视图中(临时)粘贴的任何其他内容都可以愉快地出现,做这件事,然后再去,而不会在其他地方造成问题?
    • 正如我所怀疑的,加载 VC 没有响应旋转事件等,所以看起来很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多