iphone - 加载 UIWebView 时如何使用 UIProgressView?

标签 iphone uiprogressview

我正在开发一个应用程序,我在 UIWebView 中加载 urlrequest 并且它成功发生。

但现在我试图在加载过程中显示 UIProgressView(从 0.0 到 1.0),它会随着加载进度动态变化。

我该怎么做?

最佳答案

UIWebView 在正常模式下不会给你任何进度信息。您需要做的是首先使用 NSURLConnection 异步获取数据。 当 NSURLConnection 委托(delegate)方法 connection:didReceiveResponse 时,您将获取从 expectedContentLength 获得的数字并将其用作最大值。然后,在委托(delegate)方法 connection:didReceiveData 中,您将使用 NSData 实例的 length 属性来告诉您目前的进度,因此您的进度分数将为 length/maxLength ,标准化为 0.0 到 1.0 之间。

最后,您将使用数据而不是 URL 来初始化 Web View (在您的 connection:didFinishLoading 委托(delegate)方法中)。

两个注意事项:

  1. NSURLResponse 的 expectedContentLength 属性可能会是 -1(NSURLReponseUnknownLength 常量)。在这种情况下,我建议抛出一个标准的 UIActivityIndi​​cator,并在 connection:didFinishLoading 内关闭它。

  2. 确保每次从 NSURLConnection 委托(delegate)方法之一操作可见控件时,都通过调用 performSelectorOnMainThread: 来执行此操作 - 否则您将开始遇到可怕的 EXC_BAD_ACCESS 错误。

使用这种技术,当您知道应该获取多少数据时,您可以显示进度条;当您不知道时,可以显示旋转图标。

关于iphone - 加载 UIWebView 时如何使用 UIProgressView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900151/

相关文章:

objective-c - UISlider 与 ProgressView 相结合

iphone - ios 应用程序因 XMPPMessageArchiving 而崩溃

iphone - 如何将文本从 UITextField 获取到 NSString?

ios - UIWebView两次启动-iOS

iphone - 在 UIAlertView 中将 ASIHTTPRequest 与 UIProgressView 结合使用

swift - ProgressBar 在 ViewController 中不移动

iphone - 适用于 iOS 应用程序的分析库

iphone - reloadData 没有被调用

iphone - 减少 iPhone 应用程序的 Facebook SDK 大小

使用 NSTimer 快速查看进度