在UIWebView下添加几个控件(例如一些UIButton)的最简单,最快速或其他(客观)最佳方法是什么?
要清楚,我想显示一个常规的滚动UIWebView,但当滚动到达底部时,我希望在Web内容之后有一些UIControls。我宁愿不使用看起来像控件的HTML / CSS内容来伪造它;理想情况下,它们应该是真正的控件,我可以照常连接到我的视图控制器。
我不知道用一个包含UIWebView和控件的大UIScrollView(在UIScrollView和嵌套的UIWebView之间是否存在滚动冲突?)或者包含Web的UITableView尝试这样做是否最容易?在单独的单元格中查看和控制(表现会很糟糕吗?),或以其他方式我没有想过。
更新:我不认为我希望UIWebView本身实际滚动;我认为我需要调整它以适应其所有内容,完全禁用其滚动行为,然后允许用户滚动其父视图(UIScrollView或UITableView)以显示UIWebView的不同部分。
答案 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)];
}
}
}