如何在cocoa中调用webviewdidfinishload的web视图委托方法?

时间:2012-05-25 05:01:25

标签: cocoa-touch cocoa

我正在使用WebView的WebViewDidFinishLoad委托方法,但它没有被调用。每当我在WebView中运行应用程序并加载请求时。 请告诉我,如何调用方法以及我需要与文件所有者连接的代理。

任何帮助将不胜感激。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

你在另一个答案的评论中说:

- (void)webViewDidFinishLoad:(WebView *)webView{ NSLog(@"hello");}
     

此方法未被调用。

那是因为没有这样的方法。

WebView和UIWebView不是一回事。前者是在Mac上的WebKit框架中;后者是在iOS上的UIKit框架中。 WebView在iOS上不可用,并且Mac上没有UIWebView。

UIWebView是一个非常简化的WebView版本。特别是,UIWebView只有一个委托协议,其中webViewDidFinishLoad:是其方法之一,而WebView具有不少于六个委托协议。

webViewDidFinishLoad:仅存在于UIWebViewDelegate协议中,适用于iOS应用程序的UIKit框架。在Mac应用程序中实现它什么都不会,因为没有什么可以调用它。

  

请告诉我如何调用该方法......

这对你没有好处,因为实现它的重点是找出负载何时完成。为了让你自己调用它,你需要知道何时来调用它 - 即,当一个加载完成时。要知道这一点,您需要被告知WebKit已经完成了加载。正如他们在逻辑中所说的那样,begging the question

正确的解决方案是将正确的委托设置为符合正确委托协议的对象,并实现正确的方法。正确的代表是the WebView's frame load delegate。因此,正确的协议是the WebViewFrameLoadDelegate protocol。框架加载委托必须实现的协议中的正确方法是the webView:didFinishLoadForFrame: method


具有相同问题的Cocoa Touch程序员(webViewDidFinishLoad:未被调用)应该确保他们的UIWebView的委托被设置为正确的对象。如果您在代码中设置它,请确保您正在与正确的Web视图对话 - 即,您的Web视图的插座已连接(如果它在笔尖或故事板中),您正在加载笔尖或故事板(如果它在一个),并且您不是用不同的Web视图(一个来自笔尖,一个是在代码中创建,反之亦然)来破坏插座的价值。

答案 1 :(得分:0)

尝试添加(并用您的UIWebView插座名称替换myUIWebView):

[myUIWebView setDelegate:self];

在头文件中,添加<UIWebViewDelegate>,以便您可以使用以下方法:

-(void)webViewDidStartLoad:(UIWebView *)webView {

}
-(void)webViewDidFinishLoad:(UIWebView *)webView{

}

答案 2 :(得分:0)

带文件所有者的webview的第一个绑定ResourceDelegate

(void)webView:(WebView *)sender resource:(id)identifier didFinishLoadingFromDataSource:(WebDataSource *)dataSource

这对我来说非常有用。