在UITabBar应用程序中延迟加载UIWebView

时间:2009-04-26 01:46:54

标签: iphone

我有一个基于UITabBar的iPhone应用程序,每个选项卡下有4个不同的UIWebView。现在所有的UIWebViews在启动时都会加载,而且需要的时间太长了。

我想首先加载默认选项卡的UIWebView,然后在后台加载其他选项卡。这样做的最佳方式是什么?

我为每个标签设置了单独的ViewControllers,并在每个.m文件中都有这个:

- (void)viewDidLoad {

NSString *urlAddress2 = @"http://google.com ";

//Create a URL object.
NSURL *url2 = [NSURL URLWithString:urlAddress2];

//URL Requst Object
NSURLRequest *requestObj2 = [NSURLRequest requestWithURL:url2];

//Load the request in the UIWebView.
[webView2 loadRequest:requestObj2];

}

是否有一种简单的方法可以告诉其他3个标签在启动后几秒钟而不是在启动时开始加载?那会是一个好主意吗?

非常感谢!

4 个答案:

答案 0 :(得分:1)

如果您使用ASIHTTPRequest代替NSURLRequest,则可以为第一个网址触发synchronous request。完成该请求后,您可以异步(即在后台)触发其他三个URL请求。

答案 1 :(得分:1)

我通过实现所有请求都通过的模型层来解决这个问题。请求按优先级顺序排队和服务,通常一次一个。我添加了特定方法,允许控制器升级请求的优先级,以便在必要时一次激活两个或多个请求。请求完成后,它会向代理(WebView的控制器)发出警告,表明数据已准备好加载。

根据您想要设置的方式,您可以在“webViewDidFinishLoad”(或者,可能是,shouldStartLoadWithRequest或webViewDidStartLoad)中进行回调,以触发模型层出列并为下一个请求提供服务。为安全起见,您还需要在模型层中使用超时。

注意:您还需要在shouldStartLoadWithRequest中添加一些自定义代码,以区分点击次数和推送数据的模型层.I.e。你会想要返回NO或YES,具体取决于navigationType。

答案 2 :(得分:0)

您可以使用NSTimer,或在viewDidAppear或类似内容中加载。

答案 3 :(得分:0)

使用viewDidAppear。在视图完全显示并且动画结束后,这将被发送到控制器。