2010-02-25 5 views
0

J'ai un contrôleur de vue et j'intercepte les touches sur les liens dans les vues Web qu'il gère.Attraper les liens UIWebView modaux touche

Mon contrôleur de vue principal a cette méthode.

- (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]; 
} 

Et cela charge une vue modale correctement.
ExplainViewController possède une WebView. Lorsqu'un utilisateur touche un lien dans ExplainViewConroller, je voudrais également gérer cette requête (et présenter une autre vue modale).

ExplainViewController a cela, mais je reçois pas d'activité de journal à partir de ces deux méthodes (ce qui suit ni la précédente):

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

Je veux savoir où cette demande de contact de lien va et comment je peux l'intercepter.

Les deux contrôleurs de vue mentionnés utilisent ce dans leur .h <UIWebViewDelegate>

Répondre

2

Vous mentionnez que les deux contrôleurs de vue sont conformes au protocole UIWebViewDelegate, mais est la sortie de délégué du UIWebView dans la pointe pour ExplainViewController.h ensemble à une instance de ExplainViewController. Il n'appellera la méthode que si la propriété UIWebView delegate est définie.

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; 
}