UITabBar与UIWebView问题切换视图

时间:2011-03-11 20:33:42

标签: iphone objective-c ios4 uiwebview uitabbar

我有一个应用程序,其中包含5个视图的UITabBar,每个视图都附加到不同的UIWebView。每个WebView都响应:

webViewDidStartLoad:(UIWebView *)webView
webViewDidFinishLoad:(UIWebView *)webView

这两个人负责显示加载屏幕(每个标签的单独图像,切换为可见或不可见)和活动指示器。

将页面加载到WebView时,一切正常。用户点击页面上的链接,加载图像与活动指示器一起显示。当页面加载时,它们都会消失并显示新的网站。

问题是当用户点击其中一个TabBar项目时。 App拦截事件并在适当的视图中启动方法,该方法刷新页面。

问题:在点击视图立即更改为其他WebView之后,但是加载屏幕需要很长时间才能显示(从我收集它只显示传递给homeView的页面开始加载时)我无法弄清楚为什么。在调用方法后,应用程序应该首先显示加载项。

以下是从TabBar控制器调用方法的代码:

[hv performSelector:@selector(goToPage) withObject:nil afterDelay:0.0];

这是goToPage方法:

- (void) goToPage
{
    homeView.delegate = self;

    self.showLoading;

    NSURL *url = [NSURL URLWithString: [NSString stringWithFormat: @"%@/seed.php", appURL]];
    NSString *body = [NSString stringWithFormat: @"uid=%@", uID];
    NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
    [request setHTTPMethod: @"POST"];
    [request setHTTPBody: data];
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    [request release];
    NSString *seedString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

    NSArray *seedArray = [seedString componentsSeparatedByString:@":::"];

    NSString *eventNumber = [[seedArray objectAtIndex:0] retain];
    NSString *passedSid = [[seedArray objectAtIndex:1] retain];

    if (!seedString) {
        // can't connect
        NSLog(@"Can't connect.");
    }else {
        // connected
        NSLog(@"Events: %@", eventNumber);
        if(![evtNo isEqualToString:eventNumber]){
            evtNo = eventNumber;
            if(![evtNo isEqualToString:@"0"]){
                AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
            }
        }
    }

    NSURL *urlView = [NSURL URLWithString: [NSString stringWithFormat: @"%@/index.php", appURL]];
    NSString *bodyView = [NSString stringWithFormat: @"sid=%@", passedSid];
    NSData *dataView = [bodyView dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *requestView = [[NSMutableURLRequest alloc]initWithURL:urlView];
    [requestView setHTTPMethod: @"POST"];
    [requestView setHTTPBody: dataView];
    [homeView loadRequest: requestView];

    if([evtNo isEqualToString:@"0"]){
        // clearing badge
        [[[[[self tabBarController] viewControllers] objectAtIndex: 0] tabBarItem] setBadgeValue: nil];
    }else{
        [[[[[self tabBarController] viewControllers] objectAtIndex: 0] tabBarItem] setBadgeValue: evtNo];
    }
}

我的目标是在用户点击TabBar项目时显示加载图像,并在页面停止加载之前保持可见状态。

1 个答案:

答案 0 :(得分:0)

解决这个问题的方法是在没有延迟的情况下启动方法goToPage,在goToPage中显示加载屏幕,并将耗时的位移动到该类中的另一个方法,使用persormSelector启动。