【问题标题】:synchronously load html content in UIWebView在 UIWebView 中同步加载 html 内容
【发布时间】:2012-04-14 05:17:20
【问题描述】:

我使用 UIWebView 在我的应用程序中显示 html 内容,该应用程序包含两个箭头,用于在主题之间导航,就像 RSS 阅读器应用程序一样,但是当用户点击向上或向下箭头时,下一个主题不会显示,直到数据回来了,用户仍然可以与 UI 交互,这有点令人困惑,

我的问题:当用户移动到下一个/后退主题时如何阻止用户界面?换句话说,如何使 loadHTMLString:baseURL: 作为同步调用工作?谢谢!

【问题讨论】:

    标签: iphone objective-c ios xcode uiwebview


    【解决方案1】:

    您可以让加载异步发生,但将 Web 视图的 userInteractionEnabled 属性设置为 NO。 (然后返回 YES,在 didFinishLoad 回调中)。

    或者,您可以在 Web 视图上方放置一个清晰的彩色视图(将 userInteractionEnabled 设置为 NO),该视图有一个活动指示器和按钮,可以让用户取消加载。

    一个更好的主意是在屏幕外放置另外两个 Web 视图并开始为页面 N-1 和 N+1 加载它们。当用户按下页面箭头时,将框架与相应的预取 Web 视图交换。

    【讨论】:

    • 最后一个想法似乎是一个相当优雅的解决方案,你能推荐我一个好的来源吗?谢谢
    【解决方案2】:

    【讨论】:

    • 我不需要整个 GitHub 项目,但我只需要使用两个运行循环调用就可以了。谢谢指点!
    • 我希望 UISynchedWebView 工作得这么糟糕,但由于某种原因它在 UIPageViewController 上失败了。我相信这是因为事件仍在 CFRunLoopRunInMode() 内部处理,所以 UIPageViewControllerDataSource 的 viewControllerBeforeViewController 在翻页动画期间被递归调用。所以如果你不使用 UIPageViewController,你可能没问题。我们迫切需要一个完整的示例来在单独的线程上运行 UIWebView 请求并阻塞直到它们完成。
    • 更新:如果你有一个 UIPageViewController 并且仍然想使用 UISynchedWebView 来确保在你运行 javascript 之前已经加载了一个页面,你可以在主线程的事件队列上运行一个块.请参阅我对格式化代码的回答。
    【解决方案3】:

    您实际上并不想阻止用户界面。如果你这样做了,一旦你将它发送到应用商店提交,Apple 很有可能会拒绝你的应用。任何即使是远程使应用程序感觉反应迟钝的事情都会给您带来沉重的负担。相反,使用 GCD 或 performSelectorInBackground 创建一个后台线程,在其中处理您的加载,然后在加载完成后,立即将所有信息提供给您的 UIWebView,并提醒它渲染显示。

    【讨论】:

      【解决方案4】:

      如果您处于紧要关头并且拥有 UIPageViewController 并且仍想使用 UISynchedWebView 来确保在运行 javascript 之前已加载页面,您可以在主线程的事件队列上运行一个块。 javascript 运行时仍有轻微延迟,但不会导致运行循环中的递归。

      dispatch_async(dispatch_get_main_queue(), ^{
          [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]];    // self.webView is a UISynchedWebView
      
          NSLog(@"url:%@", [self.webView stringByEvaluatingJavaScriptFromString:@"window.location.href;"]);       // shows google.com instead of about:blank
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多