1

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

我想检索 URL(网页或 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 几乎立即停止

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

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

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

所以,我想这是2个问题。

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

谢谢!

4

2 回答 2

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];
}
于 2009-07-22T04:15:26.950 回答
0

看看 UIWebViewDelegate 协议应该有你需要的东西,它有 requestdidstart 加载和这样的方法,这些方法正是你想要做的

于 2009-07-22T02:42:05.613 回答