我正在开发一个应用程序,我在 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)方法中)。
两个注意事项:
NSURLResponse 的
expectedContentLength
属性可能会是 -1(NSURLReponseUnknownLength
常量)。在这种情况下,我建议抛出一个标准的 UIActivityIndicator,并在connection:didFinishLoading
内关闭它。确保每次从 NSURLConnection 委托(delegate)方法之一操作可见控件时,都通过调用
performSelectorOnMainThread:
来执行此操作 - 否则您将开始遇到可怕的 EXC_BAD_ACCESS 错误。
使用这种技术,当您知道应该获取多少数据时,您可以显示进度条;当您不知道时,可以显示旋转图标。
关于iphone - 加载 UIWebView 时如何使用 UIProgressView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900151/