加载的UIWebView底部的UIButtons

时间:2011-05-19 15:28:38

标签: iphone uitableview uiwebview

我在UITableView底部有一个UIWebView:

[self.tableView setTableFooterView:webview];

我需要在UIWebView的末尾添加一些按钮。 UIWebView的高度不是常量。如果我做了像

这样的事情
[webview addSubview:button];

按钮将与webview重叠,因为按钮框架的坐标基于UIWebView的开头。 我想在完成加载UIWebView后定义按钮的框架:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    CGRect frame = CGRectMake(10, webView.bounds.size.height, 280, 21);

但问题是我在UITableView中也有一些数据,它的高度不是常数。当然,我可以在构建它时将UITableView的高度保持在一个变量中,但我认为这是一个非常难看的解决方案。 我还想过在UITableView中有2个页脚,但它看起来不太可能...... 为了防止它相关,UIWebView在添加按钮之前加载HTML字符串。 有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在HTML内容的末尾添加按钮,为它们分配一个href,然后使用here描述的技术来拦截点击(查看JavaScript回调部分,它解释了如何“在UIWebView“。

中从JavaScript调用Objective-C代码

我们的想法是在-webView:shouldStartLoadWithRequest:的委托中定义一个合适的UIWebView选择器。这将由UIWebView中完成的任何操作触发,这将导致加载新页面。

在那个选择器中,你会忽略加载(通过返回NO)并且可以执行你喜欢的任何ObjC处理,就像你在评论中描述的那样。

示例:您的按钮可能是

<button type="button" onClick="javascript:'button_1/YOU_URL">
    Click Me!
</button>

点击该按钮,将会调用webView shouldStartLoadWithRequest:

NSURL *url = [request URL];
NSString *urlString = [url absoluteString];
if ([urlString hasPrefix:@"button_1"]) {
   <DO YOUR PROCESSING HERE>
   return NO;
}

(如果没有点击按钮,请不要忘记在选择器的最末端返回YES)

顺便说一下,如果您打算在iOS应用程序中大量使用UIWebView,那么这篇PDF非常有趣。

答案 1 :(得分:0)

你说你想过有两个页脚视图。显然UITableView不支持这一点。但您可以创建自定义UIView以包含UIWebView和按钮,例如:

+--------------------------+
|                          |
|                          |
|                          |
|         web view         |
|                          |
|                          |
+--------------------------+
|                          |
| [button]        [button] |
|                          |
+--------------------------+

然后将其设置为tableview的页脚视图。