Компонент для смешанного текста, ссылок и кликабельного текста
У меня проблема. Нужен компонент для смешанного текста, ссылок и кликабельного текста.
В приложении Facebook можно увидеть пример. http://img193.imageshack.us/img193/1355/example1t.jpg
Кто-то знает, чем можно сделать это. Например, UITextView может обнаруживать ссылки в тексте, но не может вставлять кликабельный текст.
Спасибо за вашу помощь.
1 ответ
Решение
Я использовал CoreText для этой цели.
Вычисление смещений касания было немного сложным, так как я все время забывал переворачивать систему координат, но в конце концов получил его, и вот краткий обзор того, как вы можете это сделать:
- Создайте свой текст как
NSMutableAttributedString
(так как вам придется изменить его в какой-то момент). - Отсканируйте его для текста, на который вы хотите добавить ссылку, вставьте два атрибута: 1) цвет текста, например синий; и 2) пользовательский атрибут ссылки (назовите его как угодно, сделайте его значением ссылку, на которую вы хотите перейти)
- Рендеринг текста в вашем
drawRect:
, Вам нужно будет создатьCTFramesetterRef
иCTFrameRef
(последнее вы захотите сохранить. Также обратите внимание, что создание фрейм-сеттера является дорогостоящим процессом, делайте это только один раз (т. е. вне drawRect:), если это возможно). - В вашем коде обработки касаний, как я упоминал ранее, вам нужно будет компенсировать различные системы координат. Оттуда, предполагая, что вы знаете, где ваш текст использует свою систему координат, вы можете выяснить, где в отрисовываемом тексте был тап, который затем может быть перехвачен в вашем сенсорном обработчике, если атрибут над определенным
CTRunRef
содержит ваш собственный атрибут ссылки. Если это так, просто получите атрибут и передайте его чему угодно - как правило, именно здесь вы захотите использовать делегата.
В этом суть.