У меня проблема. Часть моего приложения требует, чтобы текст отображался в таблице. Текст должен быть выбираемым / копируемым (но не редактируемым), а любые URL-адреса в тексте должны быть выделены, а при нажатии позволяют мне взять этот URL-адрес и открыть встроенный браузер.
Я видел пару решений, которые решают одну из этих проблем, но не обе.
Решение 1: Значок фабрики IFTweetLabel
Первым решением, которое я попробовал, было использование класса IFTweetLabel, созданного Icon Factory и использованного в Twitterrific.
Хотя это решение позволяет обнаруживать ссылки (или все, что вы можете найти с помощью регулярных выражений) для обработки в каждом конкретном случае, оно не позволяет выбирать и копировать.
Существует также проблема, заключающаяся в том, что если URL-адрес достаточно длинный для переноса, кнопка, которую класс накладывает поверх URL-адреса, чтобы сделать его интерактивным, не может переноситься и выводить за пределы экрана, что выглядит очень странно.
Решение 2. Используйте IFTweetLabel и обрабатывайте копию вручную
Второе, что я попробовал, - это сохранить IFTweetLabel для обработки ссылок, но реализовать копирование с помощью жеста длинного нажатия, например, как это обрабатывает приложение SMS. Это просто работало, но не допускает произвольного выделения текста, копируется весь текст или вообще ничего не копируется ... Довольно черно-белое.
Решение 3: UITextView
Моя третья попытка была добавить UITextView
в качестве подпредставления ячейки таблицы.
Единственное, что это не решает, - это то, что обнаруженные URL не могут быть обработаны мной. В текстовом представлении используется метод UIApplication
openURL:
, который закрывает мое приложение и запускает Safari.
Кроме того, поскольку табличное представление может стать довольно большим, количество UITextView
s, добавленных в качестве подпредставлений, приводит к заметному снижению производительности при прокрутке по всей таблице, особенно на устройствах эпохи iPhone 3G (из-за создания, компоновки, компоновки всякий раз, когда ячейка прокручивается на экране и т. д.).
Итак, мой вопрос ко всем вам, знающим людям: «Что я могу сделать?»
Будет ли UIWebView
лучшим вариантом? Помимо снижения производительности, я думаю, что веб-просмотр решит все вышеупомянутые проблемы, и, если я правильно помню, в течение 2,0 дней документация Apple фактически рекомендовала веб-просмотры, где требовалось форматирование текста / гиперссылки.
Кто-нибудь может придумать способ добиться этого без перетаскивания производительности?
Заранее большое спасибо всем, кто может помочь.