如何同步NSScrollView和WebView的滚动?

时间:2011-05-15 13:41:59

标签: objective-c macos cocoa webview

我的应用程序有两个主要视图:NSScrollView和WebView中的NSTextView子类。 WebView显示的内容取决于用户在文本视图中输入的内容 - 所以我希望当用户滚动文本视图或Web视图时,其他按比例滚动到文本视图。

我发现this article提到了如何使用2个滚动视图进行操作。我的问题是WebKit似乎没有在任何地方使用普通的Scroll视图。

我该如何实现?我错过了什么?

2 个答案:

答案 0 :(得分:6)

要完美解决这个问题并不是一个小问题,因为很难知道文本视图中正在编辑的文本数量是否与Web视图中相似的滚动量相对应。

但是,要回答关于WebView中滚动视图的问题,我们会使用它们,但据我所知,没有广泛记录。您必须利用以下事实:通过向相应的WebView子视图询问其“enclosingScrollView”,您可以使用公共API获取正在使用的scrollview。这样的东西在WebView中对我有用,我知道只有一个框架:

[[[[myWebView mainFrame] frameView] documentView] enclosingScrollView];

答案 1 :(得分:0)

如果他们按比例滚动,可能最简单的解决方案是覆盖UIScrollview上的触摸事件,并使用(js)stringByEvaluatingJavaScriptFromString:覆盖UIWebView上的window.scroll(x,y)。但是,从webView滚动到textview将需要更多工作。 webView会触及事件,因此您需要

  1. 创建顶级UIViewUIScroll视图,该视图捕获触摸并将其发送到scrollViewwebView(通过javascript) ALL触及事件,或

  2. 使用手势识别器来执行相同操作。