Индикатор активности сети - PullRequest
4 голосов
/ 09 апреля 2010

Я использовал приведенный ниже код для загрузки веб-страницы. Все отлично работает, но я хочу остановить индикатор сетевой активности после завершения загрузки веб-страницы. Как мы можем знать, что веб-страница загружена полностью.

Кто-нибудь, пожалуйста, помогите.

UIApplication* app = [UIApplication sharedApplication];
 app.networkActivityIndicatorVisible = YES; // to stop it, set this to NO

 NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
 NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];

Ответы [ 4 ]

6 голосов
/ 10 апреля 2010

Самый простой способ сделать это - добавить эту строку после создания экземпляра UIWebView.

[webView setDelegate:self];

Теперь вы будете вызывать webViewDidFinishLoad:, и весь метод должен выглядеть следующим образом.

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

Я объясню это дальше, так как вам абсолютно необходимо понять делегирование в будущем.

UIWebView - это просто объект, отображающий веб-данные. Ему не очень нравится обрабатывать все эти другие вещи, потому что он просто любит веб-данные. Теперь в вашем случае вы хотели узнать, когда UIWebView завершил свою любимую небольшую задачу. Чтобы сделать это, ваш UIWebView дает привет своему делегату: «Эй, Холмс, я уже загрузил эти данные. Так что иди и делай, что делаешь сейчас». и ваш UIWebView продолжает свой веселый путь.

Итак, мы сказали UIWebView, что его делегатом в данном случае был наш текущий класс, установив для свойства delgate в webView значение self.

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

Имеет смысл?

3 голосов
/ 09 апреля 2010

Вам просто нужно установить webView.delegate, чтобы он указывал на некоторый объект, и заставить этот объект реализовать webViewDidFinishLoad:.

0 голосов
/ 24 ноября 2014

Чтобы показать индикатор сети при запросе загрузки UIWebView, используйте следующий код:

#pragma mark - UIWebViewDelegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    return YES;
}
//For Showing NetWork Indicator in Webview
- (void)webViewDidStartLoad:(UIWebView *)webView
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

Примечание: UIViewController<UIWebViewDelegate> и [webView setDelegate:self];

0 голосов
/ 08 сентября 2010

вот что я использовал, чтобы остановить индикатор активности:

- (void)viewDidLoad 
{               
    [super viewDidLoad];

    NSString *urlAddress = [NSString stringWithFormat:@"http://www.wikipedia.com/wiki/%@", place.name];                                                     
    NSURL *url= [NSURL URLWithString: [urlAddress stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [webView loadRequest:requestObj];

    [[self webView] setDelegate:self];

}

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

- (void) webViewDidStartLoad:(UIWebView *)webView {
    [activityIndicator startAnimating];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...