CoreText - изменить цвет текста при нажатии

Я использую CoreText для рисования текста в ячейках табличного представления, поскольку реализовал технику быстрой прокрутки. Ссылки в моем тексте имеют другой цвет и реагируют на клики, но я не могу понять, как сделать так, чтобы ссылки выглядели так, как будто по ним нажимают, т.е. меняют цвет при нажатии, а затем возвращают обратно. Я видел это во многих приложениях, но не уверен, как это делается. Можно ли это сделать с помощью CoreText или мне нужно использовать что-то еще?

Я знаю, что это можно сделать с помощью UILabels, но это противоречит цели рисования текста непосредственно в представлении содержимого ячейки.

Спасибо.


person kschins    schedule 07.03.2012    source источник


Ответы (2)


Каждый раз, когда вы хотите изменить цвет текста, вам нужно отправить -setNeedsDisplayInRect: в представление, в котором вы рисуете текст. Кроме того, установите переменную, соответствующую цвету текста.

Когда представление перерисовывает и вызывает ваш drawLayer:inContext:, убедитесь, что для kCTForegroundColorAttributeName задан правильный цвет (на основе установленной вами переменной) и перерисуйте текст.

Вы также можете использовать аналогичную технику, но с методами из UIKit/UIStringDrawing.h, а не с основным текстом.

person iccir    schedule 07.03.2012
comment
Итак, я предполагаю, что вызываю этот метод, когда начинается прикосновение, а затем, когда прикосновение заканчивается, я перерисовываю текст обратно в исходный цвет? - person kschins; 07.03.2012
comment
Ага! Вы также можете использовать -setNeedsDisplay: для перерисовки всей ячейки, если у вас нет под рукой прямоугольника текстовой ссылки, но имейте в виду, что это приведет к большему рисованию (медленнее). - person iccir; 08.03.2012

Это может вам помочь.

<style type="text/css">
h1:hover {
color: red;
} </style>
<h1> Hello </h1>
person Nice18    schedule 14.02.2021
comment
Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и качественны, и с большей вероятностью привлекут положительные голоса. - person Ran Marciano; 14.02.2021