UIActivityIndicatorView не исчезает - PullRequest
2 голосов
/ 02 июля 2011

Это, кажется, очень упрощенная проблема, но я буквально не могу заставить ее работать.

У меня есть раздел моего приложения, который переводит моего пользователя в WebView, отображающий мой сайт.Как часть встроенного «браузера», я хочу, чтобы UIActivityIndicator располагался так, чтобы пользователь знал, что сайт загружается.Очевидно, когда это будет сделано, я хочу, чтобы индикатор исчез.

В данный момент индикатор активности анимируется, но затем продолжает анимироваться вечно и не останавливается и не исчезает.

Код, который я использую в .h, выглядит следующим образом:

@interface AppSupportWebsite : UIViewController <UIWebViewDelegate> {

    IBOutlet UIActivityIndicatorView *activityIndicator;

}

@property (nonatomic, retain) UIActivityIndicatorView *activityIndicator;

@end

И в моем файле .m есть следующее;(сокращенно просто отображать специальный код индикатора активности)

@synthesize activityIndicator;


- (void)webViewDidStartLoad:(UIWebView *)webView {
    [activityIndicator startAnimating];

}

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

Я создал индикатор активности в Интерфейсном Разработчике и через Владелец Файла подключил IBIutlet ActivityIndicator к белому индикатору активности через IB, но он просто не исчезнет.

Ответы [ 4 ]

4 голосов
/ 02 июля 2011

выберите индикатор активности, затем

CMD + 1

выберите "скрыть при остановке"

проверьте ваш webview.delegate = self;

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    NSLog(@"finished");

    [self.activityIndicator stopAnimating];

}
1 голос
/ 02 июля 2011

Это просто удар в темноте, но у вас могут быть проблемы, потому что UIWebView Delegate вызывается из другого потока, отличного от основного потока.Таким образом, в результате вы можете получить некоторые условия гонки.

Попробуйте этот код отправления Grand Central (GCD) и дайте мне знать, если это работает:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    dispatch_async(dispatch_get_main_queue(), ^(void) {
      [activityIndicator stopAnimating];
    });
}
0 голосов
/ 02 июля 2011
- (void)webViewDidStartLoad:(UIWebView *)webView {
    [activityIndicator startAnimating];
}

Вы можете запустить приведенный выше код несколько раз, если ваш сайт имеет несколько перенаправлений. поэтому я бы не советовал помещать эту строку в этот метод делегата. Я бы предложил поместить это в делегированный метод viewWillAppear метода viewController.

-(void)viewWillAppear:(BOOL)animated{
   [activityIndicator startAnimating];
}

Кроме того, убедитесь, что вы связали UIActivityIndicator в xib.

Надеюсь, эта помощь.

0 голосов
/ 02 июля 2011

Можете ли вы добавить оператор NSLog (просто что-то вроде NSLog (@ "Web Finished Loading!");) В метод webViewDidFinishLoad? Я предполагаю, что этот метод не вызывается. Там может быть несколько причин для этого. Например, если вы выпускаете веб-представление до того, как вы нажмете метод, он может вообще не вызывать метод.

...