現在、ファイルのテキストに多数のリンクが埋め込まれた単純な HTML ファイルが UIWebView にロードされています。これらのリンクを UIPopover で開く方法があるかどうか疑問に思っています。
リンクは別の HTML ファイルへのリンクなので、UIWebView を内部に持つ UIPopover にロードするようにしたいと思います。
私が探しているものについて十分に明確でない場合はお知らせください。
UIWebViewDelegate のこのメソッドを確認する必要があります
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
これは、ユーザーがリンクをトリガーするたびに呼び出されます
そのため、UIWebView を含む viewController をその webView のデリゲートに作成し、このメソッドを実装します。
戻り値が BOOL の場合。「NO」を返すと、webview 自体はリンクを処理しようとしないため、制御できます。
(NSURLRequest *)request
実際のリンクを提供します...
したがって、ここからコンテンツ viewController を使用して UIPopover をトリガーできます。これには、リンク データをロードできる UIWebView を含めることができます。
(面白いことに、この瞬間に質問する必要があります。私は今、似たようなものを実装しています..)
アップデート
お気づきのように、ここには微妙な点があります。UIWebView が最初にそのコンテンツをロードするとき (たとえば、viewDidLoad で)、このデリゲート メソッドが呼び出されます。この状態で戻るNO
と、最初のコンテンツが読み込まれず、不可解な空白の webView が表示されます。
これを修正するには、navigationType
パラメータを考慮する必要があります。基本的に、navigationType がUIWebViewNavigationTypeLinkClicked
(リンクをアクティブにする) 場合にのみ「NO」を返します。それ以外の場合は、戻りたいですYES
(webView はそのコンテンツをロードする必要があります)。
したがって、メソッドの完全な実装は次のようになります
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
BOOL result = YES;
if (navigationType=UIWebViewNavigationTypeLinkClicked){
[self launchPopOverWithRequest:request]
result = NO;
}
return result;
}