11

UIWebView で urlrequest をロードしているアプリケーションを開発していますが、正常に実行されました。

しかし今、ロードが進行中 (0.0 から 1.0 まで) に UIProgressView を表示しようとしています。これは、ロードの進行とともに動的に変更されます。

どうやってやるの?

4

3 に答える 3

22

UIWebView は、通常モードでは進捗情報を提供しません。まず、NSURLConnection を使用してデータを非同期に取得する必要があります。NSURLConnection デリゲート メソッドconnection:didReceiveResponseの場合、取得した数値をexpectedContentLength最大値として使用します。次に、デリゲート メソッド内で、NSData インスタンスconnection:didReceiveDataのプロパティを使用してlength、進行状況を伝えます。したがって、進行状況の割合はlength / maxLength、0.0 から 1.0 の間で正規化されます。

connection:didFinishLoading最後に、(デリゲート メソッドで) URL の代わりにデータを使用して webview を初期化します。

2 つの注意事項:

  1. expectedContentLengthNSURLResponse のプロパティが-1 (NSURLReponseUnknownLength定数)になる可能性があります。その場合、内部で遮断する標準の UIActivityIndi​​cator をスローすることをお勧めしますconnection:didFinishLoading

  2. NSURLConnection デリゲート メソッドの 1 つから可視コントロールを操作するときはいつでも、必ず呼び出して操作してくださいperformSelectorOnMainThread:。そうしないと、恐ろしい EXC_BAD_ACCESS エラーが発生し始めます。

この手法を使用すると、取得するデータ量がわかっている場合はプログレス バーを表示し、不明な場合はスピナーを表示できます。

于 2009-12-15T13:39:36.907 に答える
2

プライベート UIWebView メソッドを使用する UIWebView のこのサブクラスの使用を試みることができます。したがって、このソリューションは 100% AppStore で安全ではありません (一部のアプリではほぼ 100% 使用されますが、Facebook、Google アプリなど)。

https://github.com/petr-inmite/imtwebview

于 2011-11-23T20:17:03.223 に答える