UIActivityIndicatorView запуск / останов до и после запроса веб-страницы - PullRequest
1 голос
/ 22 июля 2009

Я использую объектив-с & Iphone 3.0 SDK

Я хочу получить содержимое URL (веб-страницы или PDF) и отобразить его в UIWebView

кажется, что нужно сделать что-то вроде этого:

NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];

это работает довольно хорошо, за исключением 1 вещи.

бывают случаи, когда запрос занимает некоторое время (скажем, 5-10 секунд). У меня есть UIActivityIndicatorView, который я хотел бы «запустить» и «остановить» в начале и в конце запроса на загрузку.

ОДНАКО, если я сделаю это

[busySignal startAnimating];
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];
[busySignal stopAnimating];

это не работает, потому что вызов loadRequest выполняется асинхронно , и поэтому мой UIActivityIndicatorView останавливается почти сразу

Есть ли способ запустить / остановить мой "busySignal" в начале и конце запроса URL?

В качестве альтернативы, я думаю, это можно сделать через NSURLConnection, который дает мне функцию обратного вызова "connectionDidFinishLoading:"

но я не могу понять, как перейти от NSURLConnection к отображению веб-страницы.

Итак, я думаю, это 2 вопроса.

1. Можете ли вы запустить / остановить UIActivityIndicatorView в начале / конце вызова loadRequest:? 2. Как вы используете NSURLConnection для извлечения содержимого URL-адреса и отображения информации в UIWebView?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 22 июля 2009

Вы действительно не хотите выполнять загрузку синхронно прямо здесь, если вы сделаете это, ваш пользовательский интерфейс будет зависать в течение нескольких секунд во время загрузки. Если ваш основной цикл выполнения останавливается слишком долго (медленное интернет-соединение), система будет считать, что вы потерпели крах и убили ваше приложение.

Вы хотите использовать методы UIWebViewDelegate, чтобы получать информацию, когда он что-то делает. Например:

myUIWebView.delegate = self;
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];

и затем вы реализуете следующие методы делегата:

//Called whenever the view starts loading something
- (void)webViewDidStartLoad:(UIWebView *)webView {
  [busySignal startAnimating];
}

//Called whenever the view finished loading something
- (void)webViewDidFinishLoad:(UIWebView *)webView_ {
  [busySignal stopAnimating];
}
0 голосов
/ 22 июля 2009

Посмотрите на протокол UIWebViewDelegate, который должен иметь то, что вам нужно, он имеет загрузку requestdidstart и такие методы, которые существуют точно для того, что вы хотите сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...