iPhone - UIActivityIndicatorView не скрывается при остановке - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть пользовательский UIWebView, написанный так:

.h

@interface MiniWebViewController : UIViewController {
    NSString* destinationURL;

    UIWebView* webView;
    UIActivityIndicatorView* activityIndicatorView;
}

@property (nonatomic, retain) NSString* destinationURL;

@property (nonatomic, retain) IBOutlet UIWebView* webView;
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView* activityIndicatorView;

- (void) run;

@end

.m

@synthesize destinationURL;
@synthesize webView;
@synthesize activityIndicatorView;

- (id) initWithFrame:(CGRect)frame {
    if (self = [super initWithNibName:@"MiniWebView" bundle:nil]) {
        self.destinationURL = @"";

        self.view.frame = frame;
        self.activityIndicatorView.center = self.webView.center;
    }

    return self;
}

- (void) run {
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.destinationURL]]];
}

Это называется инициированным из другого ViewController:

- (void) aFunction {
    MiniWebViewController* oneViewController = [[MiniWebViewController alloc] initWithFrame:CGRectMake(/*Some Rect*/];
            oneViewController.webView.tag = i;
            oneViewController.destinationURL = /*SomeURL*/;
            oneViewController.webView.delegate = self;

            [self.view addSubview:oneViewController.view]; /* the Web view is inside this one */
            [oneViewController run];
    }

    - (void) webViewDidFinishLoad:(UIWebView *)webView {
        int webViewID = webView.tag;
        MiniWebViewController* webViewController = [self.webViews objectAtIndex:webViewID];
        [webViewController.activityIndicatorView stopAnimating];
    }

    - (void)webViewDidStartLoad:(UIWebView *)webView {
        int webViewID = webView.tag;
        MiniWebViewController* webViewController = [self.webViews objectAtIndex:webViewID];
        [webViewController.activityIndicatorView startAnimating];
    }

В IB скрывается, когда проверяется также. Все связано. Стиль индикатора установлен на «Большой белый» в IB.

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

В чем проблема? Я не вижу ...

Ответы [ 2 ]

6 голосов
/ 24 апреля 2011

После тщательного изучения кода вы модифицируете UIActivityView в своем методе init. Измените их так, чтобы они были в вашем viewDidLoad. На этапе инициализации вы еще не загружены, поэтому в вашем контроллере еще не создан экземпляр этих объектов.

Это утверждение, которое необходимо переместить:

self.activityIndicatorView.hidesWhenStopped = YES;

self.view.frame = frame;
self.activityIndicatorView.center = self.webView.center;

Это восходит к основному принципу Objective C: отправка сообщения объекту nil ... возвращает nil. Иногда это раздражает, потому что нет предупреждений о времени компиляции, и при этом нет никаких исключений времени выполнения - функция языка.

0 голосов
/ 25 апреля 2011

Я глуп, и XCode / какао действительно не помогают.

Я загрузил неправильное имя XIB, которое НЕ существует. Поэтому я прошу загрузить то, что не существует, и приложение работает, даже показывая и используя объекты, которые не существуют. До одного звонка не работает, как ожидалось. Без падений... Это чепуха.

...