ローディングを表示する
UIWebViewではページ表示するまでは、だいたい白い画面の状態で待たされます。
特に重いページを表示する場合、白い画面のまま固まったように見えてしまい、あまりよろしくないです。
ローディングを早くすることは(場合によりますが)難しいので、
心理的な対策としてアクティビティインジケータを入れるのが効果的です。
(UIWebViewにかぎらず、通信が発生するときは基本入れます)
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
↓らへんのライブラリを使うのも良いです。
MBProgressHUD
Demoの使い方そのままだと、インジケータ表示中はUIが操作できなくなるので
その場合はuserInteractionEnabled = NO
にしておきます。
_hud.userInteractionEnabled = NO;
(もちろん、意図的にUIを操作させたくない場合はこの限りではないです)
SVProgressHUD
オブジェクトを生成する必要がなく、クラスメソッド一本で使えるため
MBProgressHUDより気軽に導入できます。
キャッシュを消す
UIWebViewは、キャッシュが非常に強いようで
アプリを再起動するだけではキャッシュが消えないことがあります。
そのため、更新性の高いWebコンテンツを表示する場合は、
UIWebViewの読込み直前にキャッシュを消すことで防止できます。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//キャッシュを全て消去
[[NSURLCache sharedURLCache] removeAllCachedResponses];
mailto:// でメールアプリが起動しないことがある
UIWebViewで表示しているページでmailtoリンクを踏んだとき、
メールアプリが起動しないケースがたまに…
読込み前にmailtoを判定することで、メールアプリを開けます。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if([[[request URL] scheme] isEqual:@"mailto"]){
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}