【发布时间】:2013-08-06 04:02:55
【问题描述】:
我尝试加载 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 视图的大小并将它们添加到名为 webviews 的 NSMutableArray。但是,webViewDidFinishLoad 没有被调用。
在标题.h文件中,接口定义为:
@interface ViewController : UIViewController<UIWebViewDelegate>
我错过了什么?循环中的web_view 是否被处理掉了?
附言它看起来像这个 question 的副本,但它不是。
替代方法 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
我没有在for-loop中实例化UIWebView,而是将它放在头文件中。
@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。 - 在当前视图(或者可能是
UIScrollView)上正确排列 Web 视图,以使其不重叠。
【问题讨论】:
-
在类级别声明 UIWebView *web_view 属性。它会解决这个问题。
-
刚试过。我加了
web_view到.h,还是一样。 -
这绝对可以。尝试清理项目/删除构建文件夹等...它应该可以工作。
-
参见刚刚添加的“替代方法 2”。
-
尝试像@property (nonatomic, strong) UIWebView *web_view; 这样声明属性而不是使用 _web_view = [[UIWebView alloc]...
标签: objective-c uiwebview uiwebviewdelegate