How to synchronize scrolling of a NSScrollView and a WebView?
My app has two main views: a NSTextView subclass within a NSScrollView and a WebView. What the WebView displays is dependent on what the user enters into the text view - so I would like when the开发者_StackOverflow user scrolls either the text view or the web view the other scrolls proportionately to it.
I found this article which mentions how to do it with 2 scroll views. My problem is that WebKit doesn't seem to use normal Scroll views anywhere.
How should I implement this? What am I missing?
This is not a trivial problem to solve perfectly, as it's difficult to know whether the amount of text being edited in your text view corresponds to a similar amount of scrolling in the web view.
However, to answer your question about scroll views in WebView, they are used but as far as I know not documented extensively. You have to take advantage of the fact that you can obtain the scrollview being used, using public API, by asking the appropriate WebView subview for its "enclosingScrollView". Something like this works for me in a WebView where I know that there is only one frame:
[[[[myWebView mainFrame] frameView] documentView] enclosingScrollView];
If they are scrolling proportionately, probably the simplest solution would be to override touches events on your UIScrollview
and impliment stringByEvaluatingJavaScriptFromString:
on the UIWebView
with (js) window.scroll(x,y)
. However, scrolling from the webView to the textview will require more work. The webView eats touches events, so you would need to
create a top level
UIView
orUIScroll
view which captures the touches and sends them on to both thescrollView
and thewebView
(via javascript) for ALL touches events, oruse a gesture recognizer to do the same.
精彩评论