我有一个应用程序,其中包含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项目时显示加载图像,并在页面停止加载之前保持可见状态。
答案 0 :(得分:0)
解决这个问题的方法是在没有延迟的情况下启动方法goToPage,在goToPage中显示加载屏幕,并将耗时的位移动到该类中的另一个方法,使用persormSelector启动。