2012-01-13 82 views

回答

0

首先使用这个属性来获取参考UIWebView的滚动视图:

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

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

问题在于,当滚动发生时,您不会收到回叫...所以您必须经常检查每一个。否则,你将不得不让自己成为scrollView的委托,并实现UIWebView正在实现的所有方法,并模仿该行为,然后检查didScroll的情况。

+0

如果你有一个滚动视图的引用,你不能让你的视图控制器成为滚动视图的委托,然后得到所有的滚动事件? – 2012-01-13 22:58:27

0

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

一旦您检测到用户位于底部,您可以通过从document.location.href =“http:// madeupcallbackurl”,在JavaScript视图中从Web视图加载虚假URL来回调应用程序,然后使用Web视图委托拦截该请求并执行您的本机代码逻辑。

使用scrollview委托可能更容易,但如果你能做到这一点!

0

对不起,我在想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... 
     } 
    // } 
} 
+0

对不起,我在想UITableView。你在问UIWebView。我为UITableView做了这个,但不是UIWebView。你可以尝试用UIWebView替换上面的UITableView,看看它是否工作。 – jimmyg 2012-01-13 23:18:40

1

大厦这里,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 
0

这就是我该怎么做的。

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像素)。