【问题标题】:Calling a method when UIWebView scrollsUIWebView滚动时调用方法
【发布时间】:2011-05-02 05:04:21
【问题描述】:

我有一个包含大量文本内容的 UIWebView。我需要能够在每次移动时获取 UIWebView 的位置。我正在使用此代码来说明问题:

pageYOffset = [[webView stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"] intValue];

现在我只需要让它在每次 UIWebView 位置移动或有任何滚动时更新此变量值。是否可以在 UIWebView 滚动时调用方法?

【问题讨论】:

    标签: javascript iphone uiwebview scroll method-call


    【解决方案1】:

    我相信,如果您的标题将您的 VC 列为 UIScrollViewDelegate,您可以使用 -(void)scrollViewDidScroll:(UIScrollView *)scrollView 方法来找出它何时滚动。

    【讨论】:

    • 看来你是对的..我尝试了多种技术来实现这一点,但都失败了。对不起。
    • 这种方法确实有效,而且是一种更好的方法。只需将滚动视图委托也设置为视图控制器。 [webView.scrollView setDelegate:self]
    【解决方案2】:

    如果您的要求是在用户滚动时继续加载 webview,那么您应该将代码粘贴到

    - (void)webViewDidStartLoad:(UIWebView *)webView
    

    【讨论】:

      【解决方案3】:

      你应该扩展 UIWebView,如下所示

      @implementation UIWebView(CustomScroll)
      - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
          [self.delegate scrollViewDidScroll: scrollView];
      }
      @end
      

      并在您的控制器上实现 scrollViewDidScroll,例如:

      - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
          NSLog("webview scrolled");
      }
      

      别忘了将你的控制器设置为 UIWebView 的委托属性。

      【讨论】:

      • 一般来说,以这种方式扩展 Apple 类是个坏主意。小心。
      【解决方案4】:

      这是不正确的。如果你会使用:

      @implementation UIWebView(CustomScroll)
      - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
          [self.delegate scrollViewDidScroll: scrollView];
      }
      @end
      

      在iOS7等页面上尝试输入数据时会失去焦点

      您需要为 UIWevView 实现自定义类并覆盖 scrollViewDidScroll:

      - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
      [super scrollViewDidScroll:scrollView];
      [((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];
      }
      

      【讨论】:

      • 这应该是答案!
      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2011-08-15
      • 2016-08-31
      • 2012-01-31
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多