У меня есть приложение, которое имеет UITabBar с 5 представлениями, каждое из которых прикреплено к отдельному UIWebView. Каждый из WebViews отвечает на:
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, и оставаться видимым до тех пор, пока страница не перестанет загружаться.