События UIWebView и удерживайте, чтобы выбрать / скопировать

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

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

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

[РЕДАКТИРОВАТЬ]

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


person Mithin    schedule 11.08.2009    source источник


Ответы (2)


«Класс UIWebView не должен быть подклассом». - из UIWebView документов Apple от Apple.

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

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

  • Если вы хотите контролировать, где пользователь может и не может переходить по гиперссылкам, или просто выполнять некоторый код всякий раз, когда он нажимает на какие-либо ссылки, вы можете добавить ловушку через " nofer_Type: "_ =" nofer_ UIWebViewDelegate протокол. Очень кстати.
  • Если вы хотите внести некоторые простые изменения в то, как страница действует или выглядит, вы можете по существу выполнить свой собственный javascript на странице с помощью вызова stringByEvaluatingJavaScriptFromString:, метода самого UIWebView. Просто передайте свой javascript в виде строки.

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

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

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

person Tyler    schedule 11.08.2009
comment
Я уже делаю то, что вы предложили, но когда я передаю штрихи UIWebView, выделение текста перестает работать. Я больше не могу выделять текст для копирования. - person Mithin; 12.08.2009
comment
Я не уверен на 100%, почему он не работает. Возможно, копирование и вставка (включая выбор) - это особая функция, при которой iPhone SDK знает, какой UIView является основным, и использует эту информацию - если это близко к тому, что происходит, то это может быть причиной вашей проблемы. Если вы проясните свою общую цель, вы сможете получить более полезные предложения от stackoverflow. - person Tyler; 12.08.2009
comment
Когда нажимаются теги div с некоторыми конкретными идентификаторами в HTML, я хочу отобразить представление, в котором некоторая информация может быть отредактирована и сохранена. Кроме того, в том же HTML-коде пользователь также должен иметь возможность выделять текст и сохранять его. Хотя я успешно реализовал первую функцию, я борюсь со второй. Когда UIView добавляется поверх UIWebView для перехвата касаний, выделение текста перестает работать. Если я удалю перекрывающийся UIView, выбор будет работать нормально. Есть идеи, как я могу заставить это работать? Спасибо. - person Mithin; 13.08.2009
comment
Комбинация shouldStartLoadWithRequest и stringByEvaluatingJavascriptFromString - это то, что вам нужно. - person Stephen Darlington; 13.08.2009
comment
@Stephen: Не могли бы вы объяснить это еще немного? Я не уверен, как следует использовать функцию shouldStartLoadWithRequest в моем случае. - person Mithin; 13.08.2009

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

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

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

person Corey Floyd    schedule 11.08.2009