这样用户就必须在UIWebView中滚动

时间:2012-04-25 08:05:59

标签: iphone objective-c ios xcode uiwebview

我有一个在iPhone上运行的应用程序,上面有一个UIWebView。我将网页加载到此视图中,用户可以通过按下我添加到页面底部的UIToolBar的按钮继续下一页。我所追求的是阻止用户按下这些按钮,直到他们向中间滚动或一直向下滚动。这可能吗?

3 个答案:

答案 0 :(得分:4)

如果它将在页面的一半处进一步,那么你可以使用webview滚动视图的内容偏移量。

我会在你的控制器中创建一个引用webview的scrollview的实例变量。在iOS 5中,您可以使用webview.scrollView属性访问scrollView,但在以前的版本中,您必须搜索webView的子视图。

if([_webView respondsToSelector:@selector(scrollView)]) {
  _webViewScrollView = _webView.scrollView;
}
else {
  for (UIView *subview in _webView.subviews) {          
    if ([subview isKindOfClass: [UIScrollView class]]) {
      _webViewScrollView = subview;
      break;
    }
  }
}

然后我会将scrollviews委托设置为我对

感兴趣的控制器
_webViewScrollView.delegate = self;

并实现以下委托方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  if( scrollView.contentOffset.y > someValue ) {
    // Enable Buttons
  }
  else {
    // Make / Keep buttons inactive..
  }
}

另一种方法是使用一些javascript并使用stringByEvaluatingJavaScriptFromString做一些时髦的东西

答案 1 :(得分:1)

使用UIWebView的scrollView属性并使用其委托回调

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; 

处理滚动结束事件和UIScrollview属性contentOffset可以告诉你滚动位置相对于其内容大小(ur网页的实际大小)。

答案 2 :(得分:0)

在启动应用程序时,禁用工具栏按钮。然后通过添加此行来检查当前滚动位置。

int position = [webView stringByEvaluatingJavaScriptFromString:@"window.scrollBy(0,180);"];

将页面滚动到特定位置以上后,启用工具栏按钮。 您可以使用滚动视图委托方法。