【发布时间】:2011-07-13 18:37:34
【问题描述】:
我有一个应用程序,它的 UITabBar 有 5 个视图,每个视图都附加到不同的 UIWebView。每个 WebView 都响应:
webViewDidStartLoad:(UIWebView *)webView
webViewDidFinishLoad:(UIWebView *)webView
这两个负责显示加载屏幕(每个选项卡的单独图像,切换可见或不可见)和活动指示器。
当页面加载到 WebView 时一切正常。用户点击页面上的链接,加载图像与活动指示器一起显示。加载页面后,它们都会消失并显示新网站。
问题是当用户点击 TabBar 项目之一时。应用拦截事件并在适当的视图中启动一个方法,该方法正在刷新页面。
问题:在点击视图立即更改为另一个 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 项时显示加载图像并保持可见直到页面停止加载。
【问题讨论】:
标签: iphone objective-c ios4 uiwebview uitabbar