我尝试加载与委托关联的 UIWebView 数组。
for (GDataXMLElement *post in array) {
NSString *msg = [[[post elementsForName:@"message"] objectAtIndex:0] stringValue];
UIWebView *web_view = [[UIWebView alloc] initWithFrame:CGRectZero];
web_view.delegate = self;
[web_view loadHTMLString:msg baseURL:nil];
NSLog(@"Msg: %@", msg);
}
msg
从 XML 读取的一些 HTML 代码在哪里。XML 已正确加载(由NSLog
行验证)。然后在我的webViewDidFinishLoad:
:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
NSLog(@"WebView Height: %.1f", webView.frame.size.height);
[webviews addObject:webView];
}
我自动调整 web 视图的大小并将它们添加到NSMutableArray
调用的webviews
. 但是,webViewDidFinishLoad
不叫。
在头.h
文件中,接口定义为:
@interface ViewController : UIViewController<UIWebViewDelegate>
我错过了什么?web_view
循环中的是否被处置?
ps 它看起来像这个问题的副本,但事实并非如此。
替代方法 1
宣布于.h
:
@property (nonatomic, weak) NSMutableArray *webviews;
然后执行:
for (GDataXMLElement *post in array) {
NSString *msg = [[[post elementsForName:@"message"] objectAtIndex:0] stringValue];
UIWebView *web_view = [[UIWebView alloc] initWithFrame:CGRectZero];
web_view.delegate = self;
[web_view loadHTMLString:msg baseURL:nil];
NSLog(@"Msg: %@", msg);
[self.webviews addObject:web_view];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
NSLog(@"WebView Height: %.1f", webView.frame.size.height);
}
替代方法 2
我没有实例化UIWebView
in for-loop
,而是将其放在头文件中。
@interface ViewController : UIViewController<UIWebViewDelegate> {
UIWebView *web_view;
}
然后更改for循环:
for (GDataXMLElement *post in array) {
NSString *msg = [[[post elementsForName:@"message"] objectAtIndex:0] stringValue];
web_view = [[UIWebView alloc] initWithFrame:CGRectZero];
web_view.delegate = self;
[web_view loadHTMLString:msg baseURL:nil];
NSLog(@"Msg: %@", msg);
[self.webviews addObject:web_view];
}
在这种方法中,只有最后一条消息的委托被调用。
总结与亮点:
我的目标:
- 加载所有
UIWebView
可变大小的内容 - Web 视图应自动适应内容的大小(无需滚动);这就是为什么
webViewDidFinishLoad
需要。 - 在当前视图(或可能是一个)上正确排列 Web 视图
UIScrollView
,以使其不重叠。