2010-02-25 59 views
0

我有一个视图控制器,我拦截它管理的网络视图内的链接触动。捕捉模态UIWebView链接触及

我的主视图控制器有这个方法。

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 

{ 
    //I can see this request come in upon a touch 
    NSURL *url = request.URL; 
    NSString *urlString = url.absoluteString; 
    NSLog(@"raw: %@", urlString); 

    //do some stuff (like figure out what capturedFilename is) 
    ExplainViewController *explanation = [[ExplainViewController alloc] initWithNibName:@"ExplainViewController" bundle:nil file:capturedFilename]; 
    [self.navigationController presentModalViewController:explanation animated:YES]; 
} 

而且这会正确加载模态视图。
ExplainViewController有一个webView本身。 当用户触摸ExplainViewConroller中的链接时,我也想处理该请求(并呈现另一个模态视图)

ExplainViewController有这个,但我得到这两种方法(以下也没有以前)没有日志活动:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = request.URL; 
    NSString *urlString = url.absoluteString; 
    NSLog(@"raw: %@", urlString); 
} 

我想知道这个链接触摸请求去,我怎么能拦截它。

提到的两个视图控制器在它们的.h都采用这种 <UIWebViewDelegate>

回答

2

你提到两个视图控制器符合UIWebViewDelegate协议,但是在笔尖为ExplainViewController.h集到的UIWebView的委托出口ExplainViewController的实例。除非设置了UIWebView委托属性,否则它不会调用该方法。

0
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
if (navigationType == UIWebViewNavigationTypeLinkClicked) { 

    BrowserController *browserController = [[BrowserController alloc] initWithUrl:request.URL.absoluteString]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:browserController]; 
    [self.navigationController presentModalViewController: navController animated:YES]; 
    [browserController release]; 
    [navController release]; 

    return NO; 
} 
return YES; 
}