2013-08-27 1 views
7

Я исследовал и исследовал и до сих пор не понимаю, почему shouldStartLoadWithRequest никогда не вызывается. Моя страница загружается отлично, и вызываются некоторые из методов протокола делегатов UIWebview. Вы можете найти соответствующие фрагменты из моего кода ниже:shouldStartLoadWithRequest никогда не называется

обобщать мой WebView в моей .m (определенный в заголовочном файле):

@implementation PortViewController 

@synthesize WebView = myWebView; 

я загрузить мой WebView успешно:

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

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

установить мой делегат самостоятельно

- (void)viewDidLoad 
{ 


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

//myWebView.description. 

myWebView.delegate = self; 
} 

все мои методы протокола называются EXCEPT 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; 
} 

Заранее спасибо.

+1

Это опечатка, или вы на самом деле реализовали неверный метод 'WebView: shouldStartLoadWithRequest: navigationType:'? 'W' должен быть маленьким регистром' webView'. – Amar

ответ

1

метод делегата должен быть:

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

И если у вас есть UIWebView в XIb, то, возможно, вы пытаетесь загрузить запрос, когда UIWebView равна нулю

Поэтому убедитесь, что ваш экземпляр myWebView существует.

+2

Это было дорожное строчное «спасибо». Я собираюсь купить очки. – user2720747

+0

вот почему «автозаполнение» для. С момента, когда вы заявили, что ваш класс поддерживает какой-то протокол , вы можете просто набирать методы с автозаполнением для этого делегата – Injectios

13

Попробуйте установить делегат в ViewWillAppear вместо ViewDidLoad

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

и включает Webview делегат в вашем интерфейсе PortViewController.m файл

@interface PortViewController()<UIWebViewDelegate> 


@end 

Он должен работать.

+0

спасибо! отличный ответ. вы можете упростить его, не устанавливая интерфейс для PortViewController()