【问题标题】:iPhone - webViewDidFinishLoad not callediPhone - 未调用 webViewDidFinishLoad
【发布时间】:2011-12-13 08:38:34
【问题描述】:

我有一个简单的 IB 视图,其中只包含一个 UIWebView 和一个 UIButton。
webView 被保留,已连接,而不是 nil,委托属性 os 也已连接,Controller 符合 UIWebViewDelegate 并在 .h 中设置。
在 ViewDidLoad 中,我使用[self.webView loadHTMLString:htmlContent baseURL:nil];

内容加载,但从未触发webViewDidFinishLoaddidFailLoadWithErrorwebViewDidStartLoad

我如何知道我的内容何时完成加载,因为它需要很短的时间,但仍然需要一段时间才能加载(例如,我需要在展示的这段时间内做一些事情不显示按钮)?

@interface MyController : UIViewController <UIWebViewDelegate> {
    UIWebView* webView;
}

@property (nonatomic, retain) IBOutlet UIWebView* webView;

@end


@implementation MyController

@synthesize webView;

- (void)viewDidLoad
{
[super viewDidLoad];

constructing the htmlString

id a = self.webView.delegate; // for debug
[self.webView loadHTMLString:htmlContent baseURL:nil];
}

@end

编辑: 我已经删除了整个 XIB 并从 scrathc 构建它:没有问题了。 IB有时很烂。

【问题讨论】:

  • htmlcontent 不是 nil 吗?显示如何加载的代码。
  • 是否应该调用 shouldStartLoadWithRequest ?
  • @logancautrell : shouldStartLoadWithRequest 没有被调用
  • 尝试删除 nib 中的 uiwebview 并将代理和插座重置为它。
  • 我可以看到代理是 nil(在 viewDidLoad 中),但它连接到 IB。我一次又一次地尝试连接它,但这并没有改变任何东西。

标签: iphone cocoa-touch uiwebview properties interface-builder


【解决方案1】:

您需要在您的类中实现UIWebViewDelegate 协议并设置self.webView = self 的委托属性。您需要为该类实现非可选委托方法,以及webViewDidFinishLoaddidFailLoadWithErrorwebViewDidStartLoad 方法。

【讨论】:

  • 请看我的编辑,虽然我很清楚但我不是:代表已连接。
【解决方案2】:

我已经删除了整个 XIB 并从头开始重新构建它:没有问题了。 IB有时很烂。

【讨论】:

    【解决方案3】:

    只是一种暗中的刺。就您上面的代码而言,您仍然没有将响应对象设置为 webView 委托,您已经设置了指向 webView 委托对象的指针,但是当 webView 去响应委托时,它仍然是 nil。

    你应该有:self.webView.delegate = a;但即便如此我也不知道这是否可行,因为我不知道 a 是什么,它是响应委托回调的对象吗?

    【讨论】:

    • 正如问题中所说,代表已连接(即进入 IB)。 id a 仅用于测试目的(即用于调试)。
    【解决方案4】:

    你必须在你的类中实现UIWebViewDelegate协议并设置self.webView.delegate=self;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多