滚动时,当用户位于UIWebView的底部时,如何检查/调用方法?当用户位于内容的底部时,我想弹出一个视图(添加一个子视图)。
答案 0 :(得分: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
答案 1 :(得分:0)
首先使用此属性获取对UIWebView scrollView的引用:
@property(nonatomic, readonly, retain) UIScrollView *scrollView
获得对它的引用后,您可以检查它的contentSize并将其与contentOffSet进行比较。你不能让自己成为它的委托,因为UIWebView已经是scrollView的委托,但这个技巧应该有用。
问题是当滚动发生时你没有得到callBack ......所以你必须经常检查。否则,您必须使自己成为scrollView的委托,并实现UIWebView正在实现的所有方法并模仿该行为,然后检查didScroll
是否存在该条件。
答案 2 :(得分:0)
另一种选择是将一些JavaScript注入Web视图,然后使用JavaScript中的window.onscroll事件来检测用户何时滚动到窗口底部(如果检测到滚动事件,您可以在线找到大量示例使用JS)。
一旦您检测到用户位于底部,您可以通过在document.location.href =“http:// madeupcallbackurl”中填写来自JavaScript的Web视图中的假网址来回调应用程序,然后使用Web视图委托来拦截该请求并执行您的本机代码逻辑。
如果你能做到这一点,使用scrollview委托可能更容易!
答案 3 :(得分: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...
}
// }
}
答案 4 :(得分: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];
}
现在,只要您的webView滚动,就会调用此方法。在以下情况下,您的webView将滚动到底部:
<强> 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 Position(即webView左上角的y坐标)与内容底部之间的差异将是等于webview框架的高度。代码作用于满足此条件以进入if
条件。
为了安全起见,您可以修改if
条件以获得错误余量(可能是+或 - 10像素)。