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

use*_*146 1 iphone objective-c uiwebview

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

我想检索URL(网页或pdf)的内容并在其中显示 UIWebView

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

NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];
Run Code Online (Sandbox Code Playgroud)

除了1件事之外,这种方法效果很好.

有些情况下请求需要一段时间(比方说5-10秒).我有一个UIActivityIndi​​catorView,我想在加载请求的开始和结束时"开始"和"停止".

但是,如果我这样做

[busySignal startAnimating];
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];
[busySignal stopAnimating];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

1.您可以在调用loadRequest的开头/结尾处启动/停止UIActivityIndi​​catorView: 2.如何使用NSURLConnection检索URL的内容并在UIWebView上显示信息?

谢谢!

Lou*_*arg 5

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

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

myUIWebView.delegate = self;
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL];
[myUIWebView loadRequest:requestObject];
Run Code Online (Sandbox Code Playgroud)

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

//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];
}
Run Code Online (Sandbox Code Playgroud)