События UIWebView и удерживайте, чтобы выбрать / скопировать - PullRequest
2 голосов
/ 11 августа 2009

Я создал подкласс UIWebView и добавил UIView поверх него, чтобы перехватывать сенсорные события и использовать их.

Теперь, из-за дополнительного представления, добавленного поверх UIWebView, выделение текста вообще не работает. Когда я удаляю лишний UIView, текст выделяется, но затем я не могу определить события.

Есть ли способ, которым обе функции могут сосуществовать?

[EDIT]

Может быть, мой пост был недостаточно понятен. Когда я подкласс UIWebView для обработки событий, выбор перестает работать. Я не могу больше выбрать текст для копирования. Есть идеи почему?

Ответы [ 2 ]

4 голосов
/ 11 августа 2009

"Класс UIWebView не должен быть разделен на подклассы." - от Apple UIWebView документы .

Звучит так, будто вы пытаетесь связываться с тем, как человек взаимодействует с веб-страницей, что может привести к тому, что вы будете отклонены из магазина приложений. (По многим возможным причинам отклонения проверьте приложение отклонено .)

Если вы не беспокоитесь об этом, вот несколько советов, которые могут помочь вам в достижении ваших целей:

  • Если вы хотите контролировать, где пользователь может и не может переходить по гиперссылкам, или просто выполнять некоторый код всякий раз, когда они нажимают на некоторые ссылки, вы можете добавить ловушку с помощью метода webView:shouldStartLoadWithRequest:navigationType: протокол UIWebViewDelegate. Очень удобно.
  • Если вы хотите выполнить несколько простых модификаций того, как страница работает или выглядит, вы можете по сути выполнить свой собственный javascript на странице с помощью вызова stringByEvaluatingJavaScriptFromString:, самого метода UIWebView. Просто передайте свой JavaScript как строку.

И, в случае, если это не даст вам желаемого (в этом случае вы действительно будете отмечать их галочками в магазине приложений), тогда вы, вероятно, можете делать то, что уже делаете, и просто распространять информацию. все эти UITouch до самого UIWebView. Примерно так, например (в перекрытии UIView):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  [self doWhatever];
  [underlappingWebView touchesMoved:touches withEvent:event];
}

Таким образом, вы можете получить свой торт (получить информацию о прикосновении пользователя) и съесть его (веб-страница должна работать как обычно).

0 голосов
/ 11 августа 2009

Не то, что вы хотите услышать, но вам определенно нужно пересмотреть свою стратегию, чтобы получить желаемую функциональность.

UIWebview имеет много сложного поведения, он инкапсулирует весь механизм веб-рендеринга.

Вероятно, вы можете достичь своих целей другим способом (возможно, с помощью элемента панели инструментов) или желаемая функциональность может быть скрыта в методе делегата.

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