3

(斯威夫特,iOS8上,Xcode6,iPhone/iPad的)webViewDidFinishLoad没有发射称为工作

webViewDidFinishLoad不会被调用,不点火,不工作。

是的,我已经设置了包含视图控制器作为委托。我在UIWebView上按住CTRL键,拖动到代表视图控制器的小黄圈,然后释放。右键单击UIWebView对象会显示该委托已设置。

是的,我确实在我的类声明实现UIWebViewDelegate,就像这样:

class Paragraph: UIViewController, UIWebViewDelegate { 

是的,我没有重新启动的Xcode和测试的模拟器和真正的iPhone 4S两者。

请求如下:

@IBOutlet var paragraph : UIWebView = nil 

var r = NSBundle.mainBundle().pathForResource("cheddar", ofType: "htm") 
var u = NSURL(fileURLWithPath: r) 
paragraph.loadRequest(NSURLRequest(URL: u)) 

回调函数如下:

func webViewDidFinishLoad() { 
    println("webViewDidFinishLoad") 
} 
+0

'方法不会覆盖它的父类中的任何方法' – kmiklas

+2

愚蠢的问题,但是在'paragraph.loadRequest(...)'调用之前有'paragraph.delegate = self'吗? – Jiaaro

+0

我把它放在那里(虽然我不明白为什么它需要,如果我将UIWebView委托连接到故事板中的包含视图控制器),但“webViewDidFinishLoad”仍未被调用。 – kmiklas

回答

4

我知道了。回调失踪了一个参数。对于后人:

func webViewDidFinishLoad(webView: UIWebView!) { 

注意webView: UIWebView!参数

在这种情况下,也许更重要的,是我发现的bug的方式。我创建了一个全新的视图控制器,并将它拼凑在一起,仔细检查每一步以确保我没有遗漏任何东西。

当Intellisense弹出窗口显示带参数的功能时,我看到了我的错误。

注意:在Swift 2.2中,UIWebViewDelegate协议指定了不同的选项: webView: UIWebViewwebView: UIWebView!产生警告。