2011-08-18 24 views
7

Presentando in modo modesto un UIViewController con un UIWebView come visualizzazione. Come posso ignorare lo UIWebView quando l'utente preme su di esso un pulsante Annulla?Come cancellare un UIWebView?

Un'idea che ho è quella di avere il link annullare pulsante per http://cancel e poi il check-in

- (void)webViewDidStartLoad:(UIWebView *)webView 

Se webView.request.URL.host isEqualToString:@"cancel", quindi respingere il controller della vista.

L'host deve contenere un punto, ad es. "Cancel.com"?

risposta

8

Sei sulla strada giusta, ma il tuo approccio è leggermente fuori. Non hai bisogno o vuoi che questo sia un URL HTTP. Crea il tuo URL cancel:.

<a href="cancel:">Thing to click</a> 

Quindi implementare webView:shouldStartLoadWithRequest:navigationType: nella propria visualizzazione Web delegato. Qualcosa di simile a questo (non verificato):

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([request.URL.scheme isEqualToString:@"cancel"]) { 
     [self dismissModalViewControllerAnimated:YES]; 
     return NO; 
    } 
    return YES; 
} 
+0

Grazie! Ho pensato di usare '-webView: shouldStartLoadWithRequest:' invece subito dopo la pubblicazione ma non ho potuto modificare la domanda. Usare lo schema dell'URL è meglio. Dolce! – ma11hew28

+0

Questo è esattamente quello che sto cercando. Bella risposta. Grazie! – venj

6

Non è del tutto chiaro se si desidera interrompere il caricamento in una visualizzazione Web o semplicemente chiudere il controller della vista modale che lo contiene.

Per interrompere il caricamento:

[webView stopLoading]; 

per chiudere il controller della vista:

[self dismissModalViewControllerAnimated:YES]; 

Non dimenticare di impostare il delegate a zero prima di rilasciarlo vista web.

+0

+1 perché questo è il modo migliore per farlo anche se tutto ciò che si desidera è chiudere il controller di visualizzazione. Ho riscontrato problemi con l'arresto anomalo dell'app se WebView sta ancora tentando di caricare in background dopo che il controller della vista è stato chiuso. – Sepui