Ios 未调用UIWebView webViewDidLoadFinish方法
今天晚上,我一直在swift上玩web视图,但遇到了一些问题 由于某些原因,我无法启动webViewDidStartLoad或webViewDidFinishLoad方法。 在我的故事板中,我有一个名为webView的出口链接到我的UIWebView元素 有人能帮我做错事吗 这是我的viewController.swift文件:Ios 未调用UIWebView webViewDidLoadFinish方法,ios,uiwebview,swift,Ios,Uiwebview,Swift,今天晚上,我一直在swift上玩web视图,但遇到了一些问题 由于某些原因,我无法启动webViewDidStartLoad或webViewDidFinishLoad方法。 在我的故事板中,我有一个名为webView的出口链接到我的UIWebView元素 有人能帮我做错事吗 这是我的viewController.swift文件: import UIKit class ViewController: UIViewController, UIWebViewDelegate { @IBOu
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet var webView : UIWebView
var url = NSURL(string: "http://google.com")
override func viewDidLoad() {
super.viewDidLoad()
//load initial URL
var req = NSURLRequest(URL : url)
webView.loadRequest(req)
}
func webViewDidStartLoad(webView : UIWebView) {
//UIApplication.sharedApplication().networkActivityIndicatorVisible = true
println("AA")
}
func webViewDidFinishLoad(webView : UIWebView) {
//UIApplication.sharedApplication().networkActivityIndicatorVisible = false
println("BB")
}
}
正如其他人所指出的,设置UIWebView的委托并遵守UIWebViewDelegate协议是最好的解决方案。试试这个
var req = NSURLRequest(URL: url)
webView.delegate = self
webView.loadRequest(req)
为了其他可能在这里成功的人。我已将我的委托方法放在委托调用方无法访问的私有扩展中。一旦我将扩展名更改为internal,代理就开始被正确调用。我也遇到了同样的问题,甚至我确认了UIWebViewDelete为self并实现了其方法
//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")
let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)
上面的逻辑和我从快速谷歌搜索得到的测试URl完美地结合在一起
但当我换上我的时,我感到很惊讶。webViewDidFinishLoad从未被调用
那我们是怎么解决的
在后台,我们必须将内容类型定义为标题中的文档。它就像魅力一样
因此,请确保您的服务器后端也是如此
以下是我在SWIFT 3中与同一问题斗争的2美分: 以这种方式声明委托方法请注意参数的声明:
func webViewDidStartLoad(_ webView: UIWebView)
func webViewDidFinishLoad(_ webView: UIWebView)
请记住在Interface Builder中将self设置为webview的委托属性,或者选择webview,从代理出口从连接检查器拖动到webview,或者通过编程方式:self.webview.delegate=selfSwift 3有我的详细解决方案: 1在类中声明编写UIWebViewDelegate。例如: 类MyViewController:UIViewController、UIWebViewDelegate{ 2当然,在故事板中,按如下方式创建指向UIViewController的链接: @ibvar-webView:UIWebView 3在func viewDidLoad中添加一行: self.webView.delegate=self
没什么了。特别想向LinusGeffarth和LLIAJLbHOu征求意见。你设置了webView的委托吗?是的,只需在你的viewDidLoad中添加webView.delegate=self;。谢谢。看起来我没有为webView设置委托。作为一个新手,我一直在学习的教程中都没有明确说明你必须这样做通过。我确实觉得这段视频很有帮助:
func webViewDidStartLoad(_ webView: UIWebView)
func webViewDidFinishLoad(_ webView: UIWebView)