如何在UIWebView下添加控件

时间:2009-07-25 08:39:24

标签: iphone uiwebview

在UIWebView下添加几个控件(例如一些UIButton)的最简单,最快速或其他(客观)最佳方法是什么?

要清楚,我想显示一个常规的滚动UIWebView,但当滚动到达底部时,我希望在Web内容之后有一些UIControls。我宁愿不使用看起来像控件的HTML / CSS内容来伪造它;理想情况下,它们应该是真正的控件,我可以照常连接到我的视图控制器。

我不知道用一个包含UIWebView和控件的大UIScrollView(在UIScrollView和嵌套的UIWebView之间是否存在滚动冲突?)或者包含Web的UITableView尝试这样做是否最容易?在单独的单元格中查看和控制(表现会很糟糕吗?),或以其他方式我没有想过。

更新:我不认为我希望UIWebView本身实际滚动;我认为我需要调整它以适应其所有内容,完全禁用其滚动行为,然后允许用户滚动其父视图(UIScrollView或UITableView)以显示UIWebView的不同部分。

3 个答案:

答案 0 :(得分:8)

您提议的UIScrollView和UITableView解决方案都不起作用。

如果您将UIWebView放在UIScrollView中,一个或另一个将拦截滚动并滚动其内容窗格,但另一个则不会。我不确定哪一个会,我认为它将是UIScrollView。在任何情况下,当您到达UIWebView中的滚动结束时,UIScrollView都没有提供滚动,反之亦然。

如果您使用UITableView,UIWebView将在其单元格内滚动,但UITableView根本不会滚动,或者UIWebView根本不会滚动,而UITableView会。如果你使用'分组'表格样式,你可以滚动UIWebView和UITableView,但它不是你正在寻找的有凝聚力的经验。

我能想到的唯一可行的方法是在UIWebView的内部进行处理,并将包含按钮的UIView添加到UIWebView使用的滚动实体中。这超出了我的意愿,但these header dumps will get you started.请记住,如果Apple注意到您正在做什么,他们可能会拒绝您的应用,此外,内部可能会随时更改,从而破坏您的代码。如果你走这条路线,试着以一种缺失功能会导致优雅失败的方式对其进行编码。

编辑:

通过一些讨论和实验,OP和我得出结论,这是非常可能的,并且有一种方法可以完全不依赖于内部。也就是说,使用封闭滚动视图,并在Web视图加载到其自己的内容视图的完整大小后调整其大小。可以使用[webView sizeThatFits:CGSizeZero]找到此大小。

如果你确实想要使用UIWebView的私有来完成这个,我有一个简短的代码示例,在UIWebView的文档视图中添加一个视图,因为无论如何我都得到了它:)

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after app launch 
    UIView* testView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
    UIWebView* testWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
    [testView addSubview:testWebView];
    [testWebView setDelegate:self];
    [testWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]];



    [window addSubview:testView];
    [window makeKeyAndVisible];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    UIView *insert = [[[UIView alloc] initWithFrame:CGRectMake(0, [[webView _documentView] frame].size.height, 320, 40)] autorelease];
    [insert setBackgroundColor:[UIColor greenColor]];
    [[webView _documentView] addSubview:insert];
}

答案 1 :(得分:1)

我不相信在公共SDK的限制范围内有任何方法可以做到这一点。

答案 2 :(得分:0)

我就是这样做的。

- (void)webViewDidFinishLoad:(UIWebView *)webView {


for(UIView *view in [webView subviews]){

    if([view isKindOfClass:[UIScrollView class]]){
        NSLog(@"Scrollview found with tag %d", [view tag]);

        UIScrollView *scroll= (UIScrollView *)view;
        [scroll addSubview:self.finishBtn];
        [finishBtn setCenter:CGPointMake(webView.center.x, scroll.contentSize.height-30)];
    }


}

}