rakuishi.com

[iOS SDK] UIWebView でタップされたリンクを Safari で開く方法

UIWebView では、リンクをロードする度に shouldStartLoadWithRequest メソッドが呼ばれます(UIWebViewDelegate プロトコルを実装する必要有り)。

そのメソッド内で YES を返すと読み込まれ、NO を返すと読み込まれないようにすることができます。このメソッド内で、UIWebView でタップされたリンクを色々と料理することが出来ます。

ここでは、タップされたリンクをすべて Safari で開く一例を紹介します。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (navigationType == UIWebViewNavigationTypeLinkClicked ) {
        [[UIApplication sharedApplication] openURL: [request URL]];
        return NO;
    }

    return YES;
}

NSURLRequest を使えば、リクエストしようとしているリンクに応じて、読み込むかどうかを設定できますね。

ユーザーのアクションを表す UIWebViewNavigationType は、こんな感じで定義されているみたいです。

**UIWebViewNavigationType**

enum {
   UIWebViewNavigationTypeLinkClicked,
   UIWebViewNavigationTypeFormSubmitted,
   UIWebViewNavigationTypeBackForward,
   UIWebViewNavigationTypeReload,
   UIWebViewNavigationTypeFormResubmitted,
   UIWebViewNavigationTypeOther
};