2012-03-11 2 views
10

Quindi vorrei rilevare un tocco su UIWebView se non sta toccando un link. Come faccio a fare questo? So che:come rilevare tap su UIWebView se non è un collegamento

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

viene chiamato ogni volta che si fa clic su un collegamento. Tuttavia, come faccio a sapere se si tratta di un tocco su UIWebView diverso dal link? Ho cercato il web e il più vicino che ho trovato è this. Tuttavia questo non mi dice se il rubinetto è su un collegamento o no

risposta

0

Sento che il seguente metodo dovrebbe funzionare teoricamente. È possibile eseguire il wrapping di UIWebView in un contenitore UIView e impostare i riconoscitori di gesti nella vista Contenitore. Quindi gli eventi di tocco non gestiti da UIWebView verranno passati alla gerarchia di visualizzazione e verranno intercettati dalla vista Contenitore.

Nel contenitore UIView implementare i gestori appropriati & è possibile rilevare i tocchi. Spero che questo sia chiaro ...

Se questo approccio non sta dando i suoi frutti, allora si potrebbe andare sulla rotta javascript. Ad esempio, inserisci eventi javascript mentre carica la pagina web & sei a posto. Vedi qui per ulteriori informazioni - Does UIGestureRecognizer work on a UIWebView?

+2

problema è quello di cliccare sul link innesca ancora l'icona del sistema di riconoscimento del rubinetto gesto – xonegirlz

+0

parte peggiore è - (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer viene chiamato prima dell'esecuzione del shouldStartLoadWithRequest – xonegirlz

+0

sì che accadrà .in 'gestureRecognizer' dovrai trovare un modo per ignorare i gesti. –

1

Lascia che ti spieghi perché è impossibile.

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
  1. Anche se sembra ci saranno chiamate ridicolo questo metodo delegato quando l'utente ha fatto clic su un collegamento con un tipo di navigazione di UIWebViewNavigationTypeOther invece di UIWebViewNavigationTypeLinkClicked. Questo accade con alcune pagine basate su javascript che si trovano comunemente su Internet.

  2. Anche se sembra completamente folle, ci saranno chiamate a questo metodo delegato con UIWebViewNavigationTypeLinkClicker più volte quando in realtà l'utente non ha fatto clic su un collegamento. Alcuni siti web incorporano il contenuto di un frame/iframe utilizzando un clic simulato su un pulsante nascosto, che causa più chiamate con UIWebViewNavigationTypeLinkClicked.

    Questo strano modo di incorporare il contenuto con un clic simulato viene effettuato per ignorare le impostazioni sulla privacy di alcuni browser. Google è stato citato in giudizio per questo qualche tempo fa e ha dovuto pagare diversi milioni di penalità, perché hanno usato questo trucco per impostare i cookie nel browser Safari anche se l'utente ha configurato il browser per non accettare questi cookie .

Quindi, se solo contare su metodo delegato di UIWebView si 'll ottenere clic quando non ce ne sono e nessuno quando ci sono scatti. Quindi, in un ambiente incontrollato, questo è impossibile.

Ma, cosa stai cercando di fare esattamente?