【问题标题】:Make it so the user has to scroll in a UIWebView使用户必须在 UIWebView 中滚动
【发布时间】:2012-04-25 08:05:58
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c ios xcode uiwebview


    【解决方案1】:

    如果它位于页面的一半并且更远,那么您可能会使用 webview 的滚动视图的内容偏移量。

    我会在你的控制器中创建一个引用 webview 滚动视图的实例变量。在 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;
        }
      }
    }
    

    然后我会将滚动视图委托设置为我感兴趣的控制器

    _webViewScrollView.delegate = self;
    

    并实现以下委托方法:

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

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

    【讨论】:

      【解决方案2】:

      使用 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 可以告诉你滚动位置相对于它的内容大小(你的网页的实际大小)。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-23
          • 1970-01-01
          • 1970-01-01
          • 2012-07-19
          • 2016-04-11
          • 1970-01-01
          • 2023-03-23
          • 2011-08-15
          相关资源
          最近更新 更多