我有一些代码需要在a UIWebView完成加载文档后运行.为此,我将UIWebView的委托设置为我的控制器,并实现了webViewDidFinishLoading方法.

这会被调用多次,具体取决于要加载的页面类型.我不确定是因为ajax请求、图像请求,还是iFrame.

有没有办法判断主请求已经完成,这意味着HTML已经完全加载?

或者延迟我的代码启动,直到所有这些事件都启动完毕?

推荐答案

记录加载开始和完成的跟踪可能会很有启发性(如果您还没有走到这一步的话).

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
       NSLog(@"Loading: %@", [request URL]);
       return YES;
    }


    - (void)webViewDidFinishLoad:(UIWebView *)webView {
       NSLog(@"didFinish: %@; stillLoading: %@", [[webView request]URL],
            (webView.loading?@"YES":@"NO"));
    }


    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
       NSLog(@"didFail: %@; stillLoading: %@", [[webView request]URL],
            (webView.loading?@"YES":@"NO"));
    }

我只是在我的一个项目中观看了对所有三个项目的调用,该项目从我的包中加载了一个帮助页面,并包含嵌入式资源(外部css、YUI!、图像).唯一通过的请求是初始页面加载,对于任何依赖项都不会调用shouldStartLoadWithRequest.所以很奇怪为什么会多次调用didFinishLoad.

也许您看到的是重定向,或者如前所述,加载页面中的ajax调用.但您至少应该能够平衡对shouldStartLoad和其他两个委托函数的调用,并能够确定加载何时完成.

Objective-c相关问答推荐

如何限制 UITextField 中的特殊字符(点和下划线除外)?

如何使 UIView 动画序列重复和自动反转

MKMapView zoom 到 viewDidLoad 上的用户位置?

使用 ARC,什么更好:alloc 或 autorelease 初始化程序?

NSLocale 和国家名称

在 UILabel.attributedText *not* 蓝色和 *not* 下划线

iOS中CALayer的UIImage

指向方法返回类型的Expected a type错误

找不到名为ProjectName的目标

CoreData 关系故障?

如何测试推送通知在我的应用程序中是否有效

如何将日期字符串解析为 iOS 中的 NSDate 对象?

应用程序内部的Gift App

在不导入自己的情况下播放系统声音

我应该在 ARC 的 init 方法中引用 self.property 吗?

声音在 iPhone 模拟器中不起作用?

Cocoa 的依赖注入框架?

Xcode 在 iOS 8 中的 Main() 中引发异常,并带有所有异常断点

无法在导航栏中心设置titleView,因为返回按钮

为整个 iPhone / iPad 应用程序设置背景图像