我想我错过了一些非常基本的东西,但无论如何我都会冒险:)。
我正在使用for循环将不同的htmls加载到UIWebView
。当html完成加载时,我想对它做一些无关紧要的事情并继续前进。出于某种原因webViewDidFinishLoad
只在for循环过程结束时被调用一次,即使我在htmlArray中有20个对象,我也想弄清楚。
有任何创造性的解决方法吗?
由于
for(int i=0;i<[_htmlArray count];i++)
{
msg = [_htmlArray objectAtIndex:i];
[_tempWebView loadHTMLString:msg baseURL:nil];
}
}
...
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self doSomeStuff:webView]; // <--only called once
NSLog(@"didFinish Snip Snap: %@; stillLoading:%@", [[webView request]URL],
(webView.loading?@"NO":@"YES"));
}
答案 0 :(得分:5)
我认为发生的事情是,通过多次调用loadHTMLString:baseURL:
,您只是覆盖了UIWebView
要求的内容。所以最后一个获胜,代表只被召唤一次。
当然UIWebView
可以编写为关闭并在一个单独的线程上异步加载(事实上确实如此)但是即便如此,你在以前加载的for循环中这么快就完成了在他们有机会加载之前取消,只有最后一个获胜。
答案 1 :(得分:0)
如果几乎同时调用多个加载,webViewDidFinishLoad:
可能不会被调用,直到最后一个加载完成。也可能只有最后一个甚至会开始加载。
答案 2 :(得分:0)
for循环不会等待视图在再次开始加载之前完成加载,因此很可能只有最后一次调用才有机会完成并调用webViewDidFinishLoad
。
创建一个名为count
的实例变量,并加载viewDidLoad
中的第一页。在webViewDidFinishLoad
增加实例变量。当count
达到20时,你已经完成了。
这样每个页面都会在调用下一个页面之前加载。