2010-03-14 9 views
3

J'utilise une vue Web personnalisée pour afficher une barre d'onglets lorsque l'utilisateur touche la vue Web. Mais quand j'ai cliqué sur un lien dans un webview, la barre d'onglets est affichée pendant un petit moment, puis la page se charge. J'utilise ce webview personnalisé pour détecter le toucher: http://github.com/psychs/iphone-samples/blob/b772b963f2acf18d478b41b44555992fcd8d4f31/WebViewTappingHack/Classes/PSWebView.mDéterminer si un lien est cliqué sur un WebView - iPhone

Puis-je détecter si un lien a cliqué ou non? Parce qu'un lien se trouve sur le webview, webview détecte le toucher et aussi il charge la page ... Je veux l'empêcher.

Merci d'avance.

Répondre

0

OK, je l'ai fait une solution de contournement et résolu par moi-même ...

Mes liens sont en bas & haut de la page, alors je suis coordonnées d'écran par le code suivant et si pos.y < une certaine valeur et pos.y> une certaine valeur, alors ne montre pas le menu ...

UITouch * touch = [touches anyObject]; 
CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow]; 
NSLog(@"Position of touch: %.3f, %.3f", pos.x, pos.y); 

Hope this helps quelqu'un ...

3

en utilisant Javascript

Au lieu d'empêcher le chargement de la page, j'injecterait Javascript dans le WebView afin que toucher le lien ne fait rien.

J'ai answered une question similaire à cela il n'y a pas si longtemps. Au lieu de désactiver tous les liens (comme l'autre question) il suffit de rechercher le lien spécifique que vous souhaitez désactiver et supprimer son attribut href.

L'utilisation d'un si vous voulez être en mesure de répondre à un utilisateur qui tente de cliquer sur le lien délégué UIWebView

Alternativement, (peut-être pour leur donner un message), vous pouvez définir le délégué du UIWebView et mettre en œuvre la webView:shouldStartLoadWithRequest:navigationType: et renvoyer NO si l'URL qui tente d'être chargée est celle que vous souhaitez bloquer. En outre, il est généralement préférable de maintenir une liste blanche plutôt qu'une liste noire pour ce type d'exclusion. Plutôt que de bloquer les liens que vous ne voulez pas, il peut être préférable de bloquer tous les liens, sauf pour ceux que vous connaissez sont sûrs de naviguer vers.

+0

En fait, je veux éviter de montrer TabBar, ne se charge pas la page ... Lorsque l'utilisateur touche le WebView et si elle est lien qui a abordé, alors je ne veux pas montrer la barre d'onglets, mais si elle est PAS de lien Je veux afficher la barre d'onglets ... J'espère que c'est plus clair maintenant. –

2

UIWebViewNavigationTypeLinkClicked = vous indique quand un lien est cliqué. Vérifiez uniquement que vous appelez

self.webView.delegate = self;

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