Уведомление об изменении выбора WebView - PullRequest
1 голос
/ 04 июня 2009

Я пытаюсь реализовать функцию, где пользователь может выбрать какой-либо текст в WebView, и, после отпускания кнопки мыши , появится маленькое окно, позволяющее пользователю выполнять некоторые операции выделенный текст.

Однако у меня возникают проблемы с определением, когда выбор пользователя был «подтвержден», из-за отсутствия лучшего слова, путем отпускания кнопки мыши. Неформальный протокол WebEditingDelegate определяет метод -webViewDidChangeSelection:, но он вызывается каждый раз, когда выбор изменяется вообще. Так, например, если пользователь перетаскивает всю строку, -webViewDidChangeSelection: вызывается много раз - один раз для каждого изменения выбранного диапазона. Очевидно, что это не сработает, так как я буду открывать окно несколько раз в течение перетаскивания.

Кто-нибудь знает способ достичь того, что мне нужно?

Ответы [ 2 ]

2 голосов
/ 04 июня 2009

Я думаю, что ваш фокус на "мышь вверх" как конечное событие может быть слишком узким. Например, что происходит, когда пользователь щелкает, а затем выбирает текст с помощью клавиш со стрелками Shift? Разве ваше программное обеспечение не должно иметь такой же эффект в этом случае?

То, что малоизвестно предложено, звучит разумно для мышиной части уравнения, но я обеспокоен тем, что, когда выделение меняется с помощью мыши, вы, возможно, никогда не получите окончательное «изменение выделенного», когда мышь находится вверх.

Итак, я бы, вероятно, подошел к этой проблеме с чистой задержкой NSTimer. каждый раз, когда вы получаете «изменение, измененное» в веб-представлении, сбрасывайте NSTimer. По истечении некоторого времени, скажем, 0,5 секунды, поднимите и / или переместите окно.

Точную настройку можно выполнить, проверив по истечении времени таймера такие критерии, как, если мышь все еще не нажата. Если мышь не работает, вы можете просто немного отложить таймер и посмотреть, была ли мышь поднята еще через полсекунды или около того.

2 голосов
/ 04 июня 2009

Вы можете использовать тот же метод, но просто проверить, не нажата ли мышь, если это так, ничего не делать, если мышь не нажата, предположить, что она была отпущена, а затем показать свое окно.

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