Отображение веб-контента
Если Ваш пользовательский интерфейс включает a UIWebView
объект, можно вывести на экран локальное содержание или содержание, загружающееся из сети.
Загрузка локального содержания
При загрузке локального содержания можно или создать содержание динамично или загрузить его из файла и вывести на экран его с помощью loadData:MIMEType:textEncodingName:baseURL:
или loadHTMLString:baseURL:
метод. Метод в Перечислении 4-1 использует loadData:MIMEType:textEncodingName:baseURL:
метод для загрузки содержания файла PDF в веб-представление.
Перечисление 4-1 , Загружающее локальный файл PDF в веб-представление
- (void)viewDidLoad { |
[super viewDidLoad]; |
NSString *thePath = [[NSBundle mainBundle] pathForResource:@"iPhone_User_Guide" ofType:@"pdf"]; |
if (thePath) { |
NSData *pdfData = [NSData dataWithContentsOfFile:thePath]; |
[(UIWebView *)self.view loadData:pdfData MIMEType:@"application/pdf" |
textEncodingName:@"utf-8" baseURL:nil]; |
} |
} |
Текст, кодирующий строку, не имеет никакого эффекта на данные PDF, но сохраняется в перечислении, например, цели.
Загрузка содержания от сети
Для загрузки содержания из сети Вы создаете NSURLRequest
объект и передача это к loadRequest:
метод Вашего веб-представления.
[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]]]; |
Поскольку загрузка веб-ресурса могла бы занять время, Вы могли бы вывести на экран индикатор действия, чтобы указать, что загрузка в стадии реализации. Можно сделать это путем присвоения делегата в веб-представлении и реализации UIWebViewDelegate
методы, как в Перечислении 4-2. Делегат выводит на экран индикатор действия, когда загрузка запускает и скрывает его когда нагрузочные концы. Если существует проблема с загрузкой, она создает сообщение об ошибке HTML и, с помощью loadHTMLString:baseURL:
метод, загрузки это в веб-представление для дисплея.
Перечисление 4-2 делегат веб-представления загрузка сети управления
- (void)webViewDidStartLoad:(UIWebView *)webView |
{ |
// starting the load, show the activity indicator in the status bar |
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; |
} |
- (void)webViewDidFinishLoad:(UIWebView *)webView |
{ |
// finished loading, hide the activity indicator in the status bar |
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; |
} |
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error |
{ |
// load error, hide the activity indicator in the status bar |
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; |
// report the error inside the webview |
NSString* errorString = [NSString stringWithFormat: |
@"<html><center><font size=+5 color='red'> |
An error occurred:<br>%@</font></center></html>", |
error.localizedDescription]; |
[self.myWebView loadHTMLString:errorString baseURL:nil]; |
} |
Если после подачи основанной на сети заявки загрузки необходимо выпустить веб-представление по какой-либо причине, необходимо отменить незаконченный запрос прежде, чем выпустить веб-представление. Можно отменить запрос загрузки с помощью веб-представления stopLoading
метод. Типичное место для включения этого кода было бы в viewWillDisappear:
метод владения просматривает контроллер. Чтобы определить, находится ли запрос все еще на рассмотрении, можно проверить значение в веб-представление загрузка
свойство. Перечисление 4-3 иллюстрирует, как Вы могли бы сделать это.
Когда веб-представление должно исчезнуть, перечисление 4-3, Останавливающее загрузку, запрашивает
- (void)viewWillDisappear:(BOOL)animated |
{ |
if ( [self.myWebView loading] ) { |
[self.myWebView stopLoading]; |
} |
self.myWebView.delegate = nil; // disconnect the delegate as the webview is hidden |
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; |
} |
loadRequest:
пример взят от UICatalog: Создание и Настройка Средства управления UIKit (Obj-C и Swift) проект примера кода.