当滚动时用户位于UIWebView的底部时,如何检查/调用方法?我想在用户位于内容底部时弹出一个视图(添加一个子视图)。检查UIWebView是否滚动到底部
回答
首先使用这个属性来获取参考UIWebView的滚动视图:
@property(nonatomic, readonly, retain) UIScrollView *scrollView
一旦你对它的引用,你可以检查它的contentSize并将其与contentOffSet比较。你不能让自己成为它的委托,因为UIWebView已经是scrollView的委托了,但是这个技巧应该可以工作。
问题在于,当滚动发生时,您不会收到回叫...所以您必须经常检查每一个。否则,你将不得不让自己成为scrollView的委托,并实现UIWebView正在实现的所有方法,并模仿该行为,然后检查didScroll
的情况。
另一种选择是将一些JavaScript注入到Web视图中,然后使用JavaScript中的window.onscroll事件来检测用户何时滚动到窗口底部(如果检测到滚动,您可以在线找到大量示例使用JS的事件)。
一旦您检测到用户位于底部,您可以通过从document.location.href =“http:// madeupcallbackurl”,在JavaScript视图中从Web视图加载虚假URL来回调应用程序,然后使用Web视图委托拦截该请求并执行您的本机代码逻辑。
使用scrollview委托可能更容易,但如果你能做到这一点!
对不起,我在想UITableView。你在问一个UIWebView。我不知道这是否会与UIWebView一起使用。
我有使用UIScrollViewDelegate这样做的代码。在其他的想法
@interface myViewController : UIViewController_iPad <UIScrollViewDelegate> {
UITableView *myTableView;
...
}
- (void)viewDidLoad {
myTableView.delegate = self;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// If necessary, verify this scrollview is your table:
// if (scrollView == myTableView) {
CGPoint offset = myTableView.contentOffset;
if (myTableView.contentSize.height - offset.y >= myTableView.bounds.size.height)
{
// The table scrolled to the bottom. Do your stuff...
}
// }
}
对不起,我在想UITableView。你在问UIWebView。我为UITableView做了这个,但不是UIWebView。你可以尝试用UIWebView替换上面的UITableView,看看它是否工作。 – jimmyg 2012-01-13 23:18:40
大厦这里,UIWebView
符合UIScrollViewDelegate
协议。您可以继承UIWebView
并重写相应的UIScrollViewDelegate
方法,调用[super ...]
,以便原始行为仍然存在。
@interface SpecialWebview : UIWebView
@end
@implementation SpecialWebview
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[super scrollViewDidScroll:scrollView];
// Check scroll position and handle events as needed...
}
@end
这就是我该怎么做的。
UIWebView
符合UIScrollViewDelegate
。使用- (void)scrollViewDidScroll:(UIScrollView *)scrollView
回调时保留您的UIWebView
正在滚动的轨迹:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//The webview is is scrolling
int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue];
int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
}
现在这个方法被调用时,您的web视图滚动。网页视图将已滚动至底部时:
webView_content_height - webView(y) = webView.frame.height; //pseudo code
您的委托回调将现在的样子:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//The webview is is scrolling
int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue];
int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
if([webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] - yPosition == webView.frame.height)
{
//The user scrolled to the bottom of the webview
}
}
什么代码转换为是,当用户滚动至底部的内容中,webView的y位置(它是webView左上角的y坐标)与内容底部之间的差异将等于webview框架的高度。该代码根据条件满足在if
条件内输入。
为了安全起见,您可以修改if
条件以具有误差(可能为+或 - 10像素)。
- 1. 检查用户是否滚动到顶部或底部
- 2. 检查用户是否已滚动到Angular 2的底部
- 3. 检查底部是否达到滚动视图的方法
- 4. 检查网格是否一直滚动到底部
- 5. 的UIWebView不滚动,直到底部
- 6. 检测滚动到底部
- 7. 如何检查滚动是Angular 4底部的底部?
- 8. 滚动查看不滚动到底部
- 9. 如何检查滚动条是否在底部
- 10. 自动滚动底部的UIWebView
- 11. jquery查找div是否达到滚动底部
- 12. 材料设计精简版,检查滚动是否达到底部
- 13. 如何使用JQuery检查div是否一直滚动到底部?
- 14. UIWebView内部滚动查看
- 15. JQuery检测滚动底部
- 16. 检测UIScrollview滚动底部
- 17. 如何检测滚动到底部
- 18. 检测滚动到DIV的底部
- 19. 问题检测是否已经的UITableView滚动至底部
- 20. 如何检测滚动条是否在最底部?
- 21. Windows滚动工作滚动到顶部而不是底部
- 22. 当滚动条底部滚动到底部
- 23. jquery使div总是滚动到底部
- 24. 检查UIWebView是否加载
- 25. UIWebView不滚动到加载/创建的网页的底部
- 26. 的UIWebView不会滚动到最后/底部
- 27. GTK滚动窗口 - 滚动到底部
- 28. 在Firefox中检测滚动到底部2滚动
- 29. 在检查上的JavaScript滚动到页面底部
- 30. 检查元素是否滚动到顶部
如果你有一个滚动视图的引用,你不能让你的视图控制器成为滚动视图的委托,然后得到所有的滚动事件? – 2012-01-13 22:58:27