Как синхронизировать прокрутку NSScrollView и WebView? - PullRequest
4 голосов
/ 15 мая 2011

Мое приложение имеет два основных представления: подкласс NSTextView в NSScrollView и WebView. То, что отображает WebView, зависит от того, что пользователь вводит в текстовое представление, поэтому я хотел бы, чтобы пользователь прокручивал либо текстовое представление, либо веб-представление, а другие прокручивали пропорционально ему.

Я нашел эту статью , в которой упоминается, как это сделать с двумя видами прокрутки. Моя проблема в том, что WebKit, похоже, нигде не использует обычные представления прокрутки.

Как мне это реализовать? Чего мне не хватает?

Ответы [ 2 ]

6 голосов
/ 10 сентября 2011

Это не тривиальная задача, которую нужно решить идеально, так как трудно понять, соответствует ли объем текста, редактируемого в вашем текстовом представлении, аналогичной величине прокрутки в веб-представлении.

Однако, чтобы ответить на ваш вопрос о представлениях прокрутки в WebView, они используются, но, насколько я знаю, не документированы широко. Вы должны воспользоваться тем фактом, что вы можете получить используемый вид прокрутки, используя публичный API, запросив соответствующее подпредставление WebView для его «enclosingScrollView». Нечто подобное работает для меня в WebView, где я знаю, что есть только один кадр:

[[[[myWebView mainFrame] frameView] documentView] enclosingScrollView];
0 голосов
/ 14 сентября 2011

Если они прокручиваются пропорционально, вероятно, простейшим решением было бы переопределение событий касаний на вашем UIScrollview и имплимент stringByEvaluatingJavaScriptFromString: на UIWebView с (js) window.scroll(x,y). Однако прокрутка от webView до textview потребует больше работы. WebView ест события касания, поэтому вам нужно будет

  1. создает представление UIView или UIScroll верхнего уровня, которое захватывает касания и отправляет их как scrollView, так и webView (через javascript) для ВСЕХ событий касаний, или

  2. используйте распознаватель жестов, чтобы сделать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...