removeFromSuperview完成后,将显示一个白色屏幕

时间:2013-03-15 05:18:50

标签: iphone ios objective-c xcode uiview

因此,对于我的应用程序,我在当前视图(classesWebView)的顶部添加了一个视图(aView)作为子视图。所有的aView都是一个UIView,它上面有一个UIActivityIndi​​catorView,当下面的视图(classesWebView)加载相应的Web页面时,它应该是动画的。

我可以看到classesWebView网页出现了(aView的alpha值为.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]它就会消失并且它下面的webPage正确加载。但是我称之为[aView removeFromSuperview]的第二个网页变成了白色屏幕。 T_T

4 个答案:

答案 0 :(得分:0)

试试这个:

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

    NSURLRequest *request=[NSURLRequest requestWithURL:class];

   [self.classesWebView loadRequest:request];

答案 1 :(得分:0)

尝试这个..并尝试不为activityIndi​​cator添加aView。试试这个指示activityIndi​​cator

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显示空白,那么你必须用这个编码你的网址

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

然后在webView

中加载此请求
[classesWebView loadRequest:request];

答案 2 :(得分:0)

我认为您不应该将子视图添加到UIWebView。尝试将aView添加到包含classesWebView的视图中,看看是否能解决问题。

答案 3 :(得分:0)

所以我从来没有让它工作,但我只是通过设置[aView setAlpha:0]来欺骗它。这对我需要的东西起作用。谢谢你的建议,伙计们。