我目前在UIWebView中加载了一个简单的HTML文件,并在文件的文本中嵌入了一堆链接。我想知道是否有办法在UIPopover中打开这些链接。
链接是另一个HTML文件,所以我希望它们加载到UIPopover中,并在其中包含UIWebView。
如果我对自己正在寻找的内容不够清楚,请告诉我。
答案 0 :(得分:3)
你应该看看UIWebViewDelegate的这个方法
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
只要用户触发链接
,就会调用此方法因此,将包含UIWebView的viewController放入该webView的委托中,并实现此方法。
如果有BOOL返回值。如果您返回“否”,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;
}