2011-08-18 20 views
7

Modalnie prezentuję model UIViewController z jego widokiem w postaci UIWebView. Jak mogę odrzucić UIWebView, gdy użytkownik kliknie przycisk anulowania?Jak anulować UIWebView?

Jeden pomysł mam jest mieć anulować link przyciskowy do http://cancel a następnie sprawdzić w

- (void)webViewDidStartLoad:(UIWebView *)webView 

Jeśli webView.request.URL.host isEqualToString:@"cancel", następnie odrzucenie kontroler widoku.

Czy host musi mieć kropkę, np. "Cancel.com"?

Odpowiedz

8

Jesteś na dobrej drodze, ale zbliżasz się do ciebie. Nie potrzebujesz lub nie chcesz, aby był to URL HTTP. Utwórz swój adres URL: cancel:.

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

Następnie zaimplementuj w swoim delegacie widoku WWW. Coś takiego (untested):

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

Dzięki! Pomyślałem o użyciu '-webView: shouldStartLoadWithRequest:' zamiast po opublikowaniu, ale nie udało się edytować pytania. Korzystanie ze schematu adresu URL jest lepsze. Słodkie! – ma11hew28

+0

To jest dokładnie to, czego szukam. Świetna odpowiedź. Dzięki! – venj

6

Nie jest całkowicie jasne, czy chcesz przerwać ładowanie w widoku sieciowym, czy po prostu zamknąć kontroler widoku modalnego, który go zawiera.

Aby zatrzymać ładowanie:

[webView stopLoading]; 

Aby oddalić widok kontrolera:

[self dismissModalViewControllerAnimated:YES]; 

Nie zapomnij ustawić widok internetowej na delegate do zera zanim zwolnij go.

+0

+1, ponieważ jest to lepszy sposób na zrobienie tego, nawet jeśli wszystko, co jest potrzebne, to odrzucenie kontrolera widoku. Wystąpiły problemy z awarią aplikacji, jeśli webView nadal próbuje załadować się w tle po zwolnieniu kontrolera widoku. – Sepui