检查UIWebView是否滚动到底部

当用户在滚动时位于UIWebView的底部时,如何检查/调用方法? 我想在用户位于内容的底部时popup一个视图(添加一个子视图)。

在这里构build其他的想法, 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 scrollView的引用:

 @property(nonatomic, readonly, retain) UIScrollView *scrollView 

一旦你得到它的引用,你可以检查它的contentSize并将其与contentOffSet进行比较。 你不能让自己成为委托,因为UIWebView已经是scrollView的委托了,但是这个技巧应该可以工作。

问题是,当滚动发生时,你不会得到callback…所以你必须经常检查。 否则,你将不得不使自己成为scrollView的委托,并实现UIWebView正在实现的所有方法,并模仿该行为,然后检查didScroll的条件。

另一个select是将一些JavaScript注入到Web视图中,然后使用JavaScript中的window.onscroll事件来检测用户何时滚动到窗口底部(如果使用JS检测滚动事件,可以在线find大量示例) 。

一旦你检测到用户在底部,你可以通过从document.location.href =“http:// madeupcallbackurl”加载一个假的url在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... } // } } 

这是我将如何做到这一点。

UIWebView符合UIScrollViewDelegate 。 使用- (void)scrollViewDidScroll:(UIScrollView *)scrollViewcallback来跟踪你的UIWebView滚动的时间:

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { //The webview is is scrolling int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue]; int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue]; } 

现在,只要您的webView滚动,就会调用这个方法。 在以下情况下,您的webView将滚动到底部:

webView_content_height - webView(y) = webView.frame.height; //pseudo code

您的委托callback将如下所示:

 - (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的左上angular的y坐标)和内容的底部之间的差异将等于webview框架的高度。 代码作用于条件满足条件内进入。

为了安全起见,您可以修改if条件以便有误差(可能是+或 – 10像素)。