【问题标题】:UITabBar with UIWebView problem with switching views带有UIWebView的UITabBar切换视图问题
【发布时间】: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


    【解决方案1】:

    解决此问题的方法是立即启动 goToPage 方法,在 goToPage 中显示加载屏幕并将耗时的位移动到该类中的另一个方法中,使用 persormSelector 启动。

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多