После завершения removeFromSuperview на экране отображается белый экран

Поэтому для моего приложения я добавляю представление (aView) поверх моего текущего представления (classesWebView) в качестве подпредставления. Все, что представляет собой aView, это UIView с UIActivityIndicatorView поверх него, который должен анимироваться, пока представление внизу (classesWebView) загружает соответствующую веб-страницу.

Я вижу, что веб-страница classesWebView действительно появляется (aView имеет альфа-значение.5), но как только он полностью завершает загрузку, aView отправляется [aView removeFromSuperview], и он исчезает, но после того, как он уходит, остается только белый экран на своем месте.

Я сделал это для двух других методов, и я не знаю, почему, только на этом методе, он отказывается сотрудничать.

Мы ценим любые предложения. Приложение для iOS 6.

Метод viewDidLoad:

-(void)viewDidLoad
{
    [super viewDidLoad];

    classesWebView.delegate = self;

    [classesWebView addSubview:aView];

    NSURL *class = [NSURL URLWithString:@"mywebistelink"]; 

    NSURLRequest *classRequest = [NSURLRequest requestWithURL:class]; 

    [classesWebView loadRequest:classRequest];   
}

Метод webViewDidStartLoad:

preView и switchView являются индикаторами активности.

- (void)webViewDidStartLoad:(UIWebView *) webview
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    if(aView.superview != nil)
    {
        [preView startAnimating];
    }
    else
    {
        [switchView startAnimating];
    }
}

Метод webViewDidFinishLoad:

- (void)webViewDidFinishLoad:(UIWebView *) webview
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    if(aView.superview != nil)
    {
        [aView removeFromSuperview];
        [preView stopAnimating];
        [preView setOpaque:false];
    }
    else
    {
        [switchView stopAnimating];
        [switchView setOpaque:false];
    }
}

[Дополнительная ясность: причина, по которой у меня есть оператор if, заключается в том, что я хочу использовать другой индикатор для classesWebView при загрузке страниц, но НЕ хочу, чтобы он отображался, если aView не было (поскольку aView уже имеет индикатор: preView)]

РЕДАКТИРОВАТЬ: Просто чтобы доказать, что это ТОЛЬКО удаление removeFromSuperview, которое вызывает проблему, если я вызываю [aView setAlpha:0.0], он исчезает, и веб-страница под ним загружается правильно. Но вторая, которую я называю [aView removeFromSuperview], веб-страница превращается в белый экран. T_T

4 ответа

Решение

Поэтому я никогда не заставлял его работать, но я обманул его, просто установив [aView setAlpha:0]. Это сработало для того, что мне было нужно. Спасибо за предложения, ребята.

Попробуй это:

    NSURL *class=[NSURL URLWithString:[yourwebistelink stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSURLRequest *request=[NSURLRequest requestWithURL:class];

   [self.classesWebView loadRequest:request];

Я не думаю, что вы должны добавлять подпредставления к UIWebView, Попробуйте добавить aView к мнению, которое содержит ваши classesWebView и посмотрим, решит ли это проблему.

Попробуйте это.. и попробуйте не добавлять aView для activityIndicator., попробуйте это для указания ActivityIndicator

UIWebView * classesWebView = [[UIWebView alloc] init];

[classesWebView addSubview:activityIndicator];
[self.activityIndicator startAnimating]; //for activityIndicator

NSURLRequest *request = [NSURLRequest requestWithURL:weburl];
classesWebView.frame = CGRectMake(0, 200, 768, 400);
[classesWebView setScalesPageToFit:NO];
[classesWebView loadRequest:request];


- (void)webViewDidStartLoad:(UIWebView *)thisWebView
{

}

- (void)webViewDidFinishLoad:(UIWebView *)thisWebView
{
[self.activityIndicator stopAnimating];

    [activityIndicator removeFromSuperview];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"Error : %@",error);
}

если все еще webView отображает пустой белый, то вам нужно закодировать ваш URL этим

NSString *encodedString=[graphStringUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *weburl = [NSURL URLWithString:encodedString];
NSURLRequest *request = [NSURLRequest requestWithURL:weburl];

тогда загрузите этот запрос в webView

[classesWebView loadRequest:request];
Другие вопросы по тегам