UIActivityIndi​​catorView开始/停止之前&在网页请求之后

时间:2009-07-22 02:00:49

标签: iphone objective-c uiwebview

我正在使用objective-c& iphone 3.0 sdk

我想检索网址(网页或pdf)的内容并在UIWebView

中显示

似乎要做的事情是这样的:

NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];

除了一件事之外,这种方法效果很好。

有些请求需要一段时间(比方说5-10秒)。我有一个UIActivityIndi​​catorView,我想在加载请求的开头和结尾“开始”和“停止”。

然而,如果我这样做

[busySignal startAnimating];
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];
[busySignal stopAnimating];

它不起作用,因为loadRequest调用是以异步完成的,因此我的UIActivityIndi​​catorView几乎立即停止

有没有办法在网址请求的开头和结尾开始/停止我的“busySignal”?

作为替代方案,我认为这可以通过NSURLConnection完成,它给我回调函数“connectionDidFinishLoading:”

但我似乎无法弄清楚如何从NSURLConnection转到显示网页。

所以,我猜这是两个问题。

1。你可以在调用loadRequest的开始/结束时启动/停止UIActivityIndi​​catorView吗? 2. 如何使用NSURLConnection检索URL的内容并在UIWebView上显示信息?

谢谢!

2 个答案:

答案 0 :(得分:5)

你真的不想在那里同步加载,如果你在加载时你的UI会卡住多秒钟。如果你的主要运行循环停止时间过长(互联网连接速度慢),系统会认为你已经崩溃并杀死你的应用程序。

您希望使用UIWebViewDelegate方法,以便在执行某些操作时获得通知。例如:

myUIWebView.delegate = self;
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];

然后在您实现以下委托方法:

//Called whenever the view starts loading something
- (void)webViewDidStartLoad:(UIWebView *)webView {
  [busySignal startAnimating];
}

//Called whenever the view finished loading something
- (void)webViewDidFinishLoad:(UIWebView *)webView_ {
  [busySignal stopAnimating];
}

答案 1 :(得分:0)

看看UIWebViewDelegate协议应该有你需要的东西,它有requestdidstart加载和那些你想要做的确切的方法