2013-06-19 5 views
1

В моем приложении я использую UIWebView для отображения различных типов файлов, таких как, HTML, PDF, DOC и т.д.UIWebView контекстного меню при отображении содержимого PDF

Я настраивая контекстное меню на содержании HTML, отключив выноски и используя распознаватель жестов. Он отлично работает для содержимого html.

Однако при отображении PDF-контента веб-представление использует разные классы из рамки corepdf, которая является частной каркасной. Таким образом, ни один из методов работы с html-содержимым не работает с pdf-контентом.

UIWebView использует UIPDFPageView и связанные классы для отображения контекстного меню при длительном нажатии на гиперссылку.

Есть ли способ переопределить отображение контекстного меню без необходимости иметь дело с частной картой?

ответ

1

С умными трюками вы можете переопределить базовый метод UIWebDocumentView-canPerformAction:withSender:, чтобы передать только то, что вы хотите отобразить. Это должно работать и для PDF, так как внутренние классы глубже в иерархии представлений, и вы должны быть в порядке с UIWebDocumentView.

На iOS5, 6 и 7 семенах 1 объект UIWebDocumentView является подзоном прокрутки в окне прокрутки UIWebView. То, что я делаю, - это найти в представлении прокрутки с префиксом @"UIWeb" в его имени класса и использовать среду выполнения Objective C для динамического подкласса к моему собственному подклассу (я создаю его во время выполнения - например, что делает система для key- наблюдение за ценностью) и заменить реализацию моим собственным. Вы можете даже вызвать предыдущую реализацию, вызвав super.

Это взломанный, но он кажется безопасным. Apple, похоже, не представила UIWebView вне процесса обработки (с использованием XPC), поэтому она также должна быть безопасной с iOS7.

Как всегда отказ от ответственности, this API is not documented and is subject to change at any given moment, and your app may stop functioning at any time®.

Смежные вопросы