2013-08-27 19 views
7

Badałem i badałem i nadal nie rozumiem, dlaczego powinienem nigdy nie wywoływaćStartLoadWithRequest. Moja strona ładuje się dobrze, a niektóre metody protokołu delegowania UIWebview są wywoływane. Należy znaleźć odpowiednie fragmenty z mojego kodu poniżej:shouldStartLoadWithRequest nigdy nie jest nazywane

Synthesize mój webview w moim .m (zdefiniowanego w pliku nagłówkowym):

@implementation PortViewController 

@synthesize WebView = myWebView; 

załadować mój webview powodzeniem:

myURLString = [NSString stringWithFormat:@"https://%@", defaultWebsite]; 

    myURL = [NSURL URLWithString: myURLString]; 
    NSURLRequest *myRequest = [NSURLRequest requestWithURL:myURL]; 
    [myWebView loadRequest:myRequest]; 

Ustaw moją powierzyć siebie

- (void)viewDidLoad 
{ 


[super viewDidLoad]; 
[myWebView setOpaque:NO]; 
[myWebView setBackgroundColor:[UIColor clearColor]]; 

//myWebView.description. 

myWebView.delegate = self; 
} 

wszystkich moich metod protokołu są nazywane OPRÓCZ shouldStartLoadW ithRequest

- (void)webViewDidStartLoad:(UIWebView *)myWebView { 
    [activityIndicator startAnimating]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)myWebView { 
    [activityIndicator stopAnimating]; 
} 

- (BOOL)WebView:(UIWebView *)myWebView shouldStartLoadWithRequest:(NSURLRequest *)request   navigationType:(UIWebViewNavigationType)navigationType { 

NSLog(@"inside Webview"); 
if([[request.URL absoluteString] hasPrefix:@"http://www.nzx"]) { 
    // do stuff 
    NSLog(@"Have caught the prefix"); 
    return YES; 
} 

    return NO; 
} 

Z góry dziękuję.

+1

Czy to literówka, czy rzeczywiście zaimplementowano niepoprawną metodę "WebView: shouldStartLoadWithRequest: navigationType:'? 'W' powinno być małym' 'viewem'. – Amar

Odpowiedz

1

metoda delegat powinien być:

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

A jeśli masz UIWebView w XIb, to prawdopodobnie próbujesz załadować żądanie kiedy UIWebView jest zerowa

Więc upewnij się, że instancja myWebView istnieje.

+2

To były krnąbrne małe litery "w" dzięki. Muszę kupić okulary. – user2720747

+0

dlatego właśnie "autouzupełnianie" dla. Od momentu, w którym zadeklarowałeś, że twoja klasa obsługuje jakiś protokół , jesteś w stanie po prostu wpisywać metody z autouzupełnianiem dla tego delegata – Injectios

13

Spróbuj ustawić delegata w ViewWillAppear zamiast viewDidLoad

-(void)viewWillAppear:(BOOL)animated 
{ 
    myWebView.delegate = self; 
} 

i obejmują delegata Webview w swoim interfejsie PortViewController.m złożyć

@interface PortViewController()<UIWebViewDelegate> 


@end 

Powinien działać.

+0

dzięki! Doskonała odpowiedź. można go uprościć, nie wymagając ustawienia interfejsu na PortViewController()

Powiązane problemy