2011-10-03 4 views
0

Как мы можем выделить текст в текстовом виде, как показано ниже, пользователь нажимает выбранный стих на hilight на стих желтого цвета и всплывающее окно apper для этого стиха для действия. Как это сделать это? Спасибо заранее. enter image description hereвыделите текст в текстовом поле

+0

Я считаю, что ваш пример использует инфраструктуру CoreText для рендеринга объектов NSAttributedString –

+0

Как я могу использовать основную работу текстового фрейма – ICoder

ответ

2

Это возможно только с использованием CoreText, поскольку для отображения текста с несколькими стилями и цветами шрифта необходимы атрибуты форматирования и NSAttributedString.

Возможно, вас заинтересует класс OHAttributedLabel, который является подклассом UILabel для визуализации NSAttributedString (очевидно, для этого используется CoreText).

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

+0

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

+0

Да, что сказал Мартин, и посмотрите на мой 'drawActiveLinkHighlightForRect:' в моем источнике, который делает именно это (рисование фона rect заданного диапазона текста). Это может показаться немного сложным, но оно управляет случаями, когда текст выделяется пересечением нескольких строк (например, на вашем снимке экрана). – AliSoftware

+0

Вы правильно настроили OHAttributedLabel? Проверьте мой примерный проект в репозитории github, я приведу много примеров. Попробуйте повлиять на ваши стихи в этом примере проекта, чтобы проверить, что он работает. Проверьте также, что ваш 'OHAttributedLabel * lable1' достаточно высок (рамка достаточно большая, чтобы отобразить атрибутString), или используйте' sizeToFit' для его соответствующего размера. _ (Обратите внимание, что если у вас есть проблемы, вы можете искать SO, то есть несколько вопросов и ответов о моей «OHAttributedLabel» здесь) _ – AliSoftware

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