ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 2

Методы делегата WebView

Углубляясь в тему UIWebView, предлагаю рассмотреть его методы делегата. Сравнительно небольшое количество этих методов (всего четыре) позволяет решать массу задач.

 

  • shouldStartLoadWithRequest для разрешения или запрета перехода по ссылке
  • webViewDidStartLoad вызывается при старте загрузки старници
  • webViewDidFinishLoad вызывается при окончании загрузки старници
  • didFailLoadWithError возвращает ошибку в случае неудачной загрузки

 

Перейдем от теории к делу. Я предлагаю воспользоваться кодом с нашего первого знакомства с UIWebView. Скачать его можна здесь. Откроем файл ViewController.m и добавим в него вышеупомянутые методы методы.

 

<code data-result="[object Object]">- (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
 navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *urlString = [[request URL] absoluteString];
    if ([urlString isEqualToString:@"http://www.imaladec.net/"]) {
        return YES;
    } else {
        return NO;
    }
}

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"%@", error);
}</code>

 

В метод shouldStartLoadWithRequest мы проверяем адерс запроса, который будет загружен в WebView и разрешаем заргрузку только для нашего сайта. В методах webViewDidStartLoad и webViewDidFinishLoad отображаем и скрываем индикатор активности сети. Такое поведение ншего браузера повторяет функционал встроенного в iOS Safari. И в конце, на случай, если произойдет какой-то сбой во время загрузки странички, информацию об ошибке выводим в консоль.

 

Чтобы все эти методы работали нам нужно добавить протокол UIWebViewDelegate. Делается это в интерфейсе нашего класса (ViewController.h):

 

<code data-result="[object Object]">#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController &lt;UIWebViewDelegate&gt;

@property (strong, nonatomic) IBOutlet UIWebView *myBrowser;

@end</code>

 

Теперь перейдем в ViewController.xib, выберем Web View, который добавили еще в прошлом примере и откроем инспектор связей. В списке Outlets вы найдете одно не связанное поле (delegate). Свяжите его с File’s Owner. Теперь все вышедобавленные нами метода будут работать.

 

Исходный код этого примера можно скачать здесь.