UIWebView.loading returns 错误
UIWebView.loading returns false
与 swift 使用以下代码:
super.viewDidLoad()
let webView = UIWebView(frame: self.view.bounds)
view.addSubview(webView)
let URL = NSURL(string: "http://www.google.com")
webView.loadRequest(NSURLRequest(URL: URL!))
println(webView.loading)
它打印错误并且屏幕是空白的。这是如何解决的?
我不确定 UIWebView
如何加载其数据的内部结构或调用 loadRequest
时究竟发生了什么,但与我的预期相反,似乎没有任何事情发生,直到该方法名为 loadRequest
的 returned.
考虑以下代码:
@IBAction func buttonPress(sender: UIButton) {
let webview = UIWebView(frame: self.view.bounds)
view.addSubview(webview)
let url = NSURL(string: "http://www.google.com")
webview.delegate = self
webview.loadRequest(NSURLRequest(URL: url!))
println("buttonPress: webview.loading? \(webview.loading)")
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
println("webview asking for permission to start loading")
return true
}
func webViewDidStartLoad(webView: UIWebView) {
println("webview did start loading")
}
func webView(webView: UIWebView, didFailLoadWithError error: NSError) {
println("webview did fail load with error: \(error)")
}
func webViewDidFinishLoad(webView: UIWebView) {
println("webview did finish load!")
}
这里,buttonPress
方法中的 println
总是在任何其他方法之前执行。事实上,无论我们在 loadRequest
调用之后放置什么样的代码,它 all 都会在 Web 视图询问 shouldStartLoadingWithRequest:
.[=27= 之前执行]
webview.loadRequest(NSURLRequest(URL: url!))
for _ in 1...10000 {
println("buttonPress: webview.loading? \(webview.loading)")
}
一万次迭代,但直到 buttonPress
方法 returns.
之后,webview 才开始
同时,webview.loading
只会 return true
在 webViewDidStartLoad
和负载可以停止的两种方式之一之间 (failure/success) (webView(webView:didFailLoadWithError:)
或 webViewDidFinishLoad()
).
IF 你实现了 UIWebViewDelegate
协议并设置了 web 视图的委托,你可以实现这些方法来跟踪加载过程。如果出于某种原因,您的 Web 视图未加载 URL,实施 webView(webView:didFailLoadWithError:)
是获取任何类型的诊断信息以确定加载失败原因的唯一方法。
这是完全正常的行为。 UIWebView
直到 UI 事件(在本例中为 viewDidLoad
)完成执行后才真正开始加载内容。所以立即检查它 returns false
因为它还没有开始。
如果您想跟踪 UIWebView
的成功或失败,您应该在视图控制器中实现 UIWebViewDelegate
。这样你就可以在请求加载完成或失败时获得回调。
与 swift 使用以下代码:
super.viewDidLoad()
let webView = UIWebView(frame: self.view.bounds)
view.addSubview(webView)
let URL = NSURL(string: "http://www.google.com")
webView.loadRequest(NSURLRequest(URL: URL!))
println(webView.loading)
它打印错误并且屏幕是空白的。这是如何解决的?
我不确定 UIWebView
如何加载其数据的内部结构或调用 loadRequest
时究竟发生了什么,但与我的预期相反,似乎没有任何事情发生,直到该方法名为 loadRequest
的 returned.
考虑以下代码:
@IBAction func buttonPress(sender: UIButton) {
let webview = UIWebView(frame: self.view.bounds)
view.addSubview(webview)
let url = NSURL(string: "http://www.google.com")
webview.delegate = self
webview.loadRequest(NSURLRequest(URL: url!))
println("buttonPress: webview.loading? \(webview.loading)")
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
println("webview asking for permission to start loading")
return true
}
func webViewDidStartLoad(webView: UIWebView) {
println("webview did start loading")
}
func webView(webView: UIWebView, didFailLoadWithError error: NSError) {
println("webview did fail load with error: \(error)")
}
func webViewDidFinishLoad(webView: UIWebView) {
println("webview did finish load!")
}
这里,buttonPress
方法中的 println
总是在任何其他方法之前执行。事实上,无论我们在 loadRequest
调用之后放置什么样的代码,它 all 都会在 Web 视图询问 shouldStartLoadingWithRequest:
.[=27= 之前执行]
webview.loadRequest(NSURLRequest(URL: url!))
for _ in 1...10000 {
println("buttonPress: webview.loading? \(webview.loading)")
}
一万次迭代,但直到 buttonPress
方法 returns.
同时,webview.loading
只会 return true
在 webViewDidStartLoad
和负载可以停止的两种方式之一之间 (failure/success) (webView(webView:didFailLoadWithError:)
或 webViewDidFinishLoad()
).
IF 你实现了 UIWebViewDelegate
协议并设置了 web 视图的委托,你可以实现这些方法来跟踪加载过程。如果出于某种原因,您的 Web 视图未加载 URL,实施 webView(webView:didFailLoadWithError:)
是获取任何类型的诊断信息以确定加载失败原因的唯一方法。
这是完全正常的行为。 UIWebView
直到 UI 事件(在本例中为 viewDidLoad
)完成执行后才真正开始加载内容。所以立即检查它 returns false
因为它还没有开始。
如果您想跟踪 UIWebView
的成功或失败,您应该在视图控制器中实现 UIWebViewDelegate
。这样你就可以在请求加载完成或失败时获得回调。