1

私のアプリで HTML コンテンツを表示するために UIWebView を使用しています。アプリには、RSS リーダー アプリと同じようにトピック間を移動するための 2 つの矢印が含まれていますが、ユーザーが上矢印または下矢印を押すと、データが来るまで次のトピックは表示されません。ユーザーは UI を操作できますが、これは少し混乱します。

私の質問: ユーザーが次/戻るトピックに移動したときに UI をブロックする方法は? つまり、loadHTMLString:baseURL: を同期呼び出しとして機能させる方法は? ありがとう !

4

4 に答える 4

2

読み込みを非同期に行うことはできますが、Web ビューの userInteractionEnabled プロパティを NO に設定します。(その後、didFinishLoad コールバックで YES に戻ります)。

または、ユーザーがロードをキャンセルできるようにするアクティビティ インジケーターとボタンを備えた Web ビューの上に、明確な色付きのビュー (userInteractionEnabled を NO に設定) を配置することもできます。

他の 2 つの Web ビューを画面外に配置し、ページ N-1 と N+1 の読み込みを開始することをお勧めします。ユーザーがページの矢印を押すと、フレームが対応するプリフェッチされた Web ビューと交換されます。

于 2012-04-14T06:08:33.653 に答える
1

これを試してください - https://github.com/gavrix/UISynchedWebView-demo

于 2012-04-14T09:18:04.263 に答える
0

ピンチにあり、UIPageViewController があり、JavaScript を実行する前に UISyncedWebView を使用してページが読み込まれたことを確認したい場合は、メイン スレッドのイベント キューでブロックを実行できます。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
});
于 2013-06-27T20:15:20.443 に答える
0

実際には UI をブロックしたくありません。これを行うと、App Store への提出のためにアプリを送信すると、Apple がアプリを拒否する可能性が非常に高くなります。離れた場所にいても、アプリケーションが応答しなくなったと感じさせるものはすべて、あなたに重くのしかかります。代わりに、GCD または performSelectorInBackground を使用してバックグラウンド スレッドを作成し、その中で読み込みを処理し、読み込みが完了したら、すべての情報を一度に UIWebView で利用できるようにし、表示をレンダリングするように警告します。

于 2012-04-14T05:24:22.157 に答える