Постановка задачи Дано: многострочный текст. Находка: красиво оформленный фон.
«Да, это продлится всего час», — подумал я.
«Вам просто нужно поместить фоновый цвет в атрибутный текст».
Но этого было недостаточно.
Дело в том, что стандартное выделение представляет собой закрашенный прямоугольник.
Уродливый.
Решение - нужен индивидуальный! Тернистый путь его создания натолкнул меня на мысль описать процесс, чтобы будущим поколениям не пришлось так сильно страдать.
Для тех, кто заинтересован, пожалуйста, обратитесь к кат.
Принятие
Первым действием было классическое обращение в Интернете с вопросом о правильности выполнения.В ответ поступило несколько предложений.
В самых адекватных все сводилось к переопределению метода fillBackgroundRectArray. В обычной жизни он отвечает за окраску текста при активации упомянутого выше свойства AttributeText. Чтобы посмотреть, что это за зверь, я попробовал готовое решение в надежде, что задача все равно займет пару часов.
Ничего не вышло.
Решение сделало что угодно.
Документация решает все
Решив больше так не делать, я обратился к документации.Отсюда стало понятно, что UITextView — это простой наследник UIScrollView для текста, которым управляют три товарища:
- NSTextStorage — это, по сути, оболочка над NSMutableAtributedString, необходимая для хранения текста и его атрибутов;
- NSTextContainer — это NSObject, отвечающий за геометрическую фигуру, в которой представлен текст. По умолчанию это прямоугольник, настроить можно что угодно;
- NSLayoutManager — управляет первыми двумя: берет текст, делает его отступы, делит на абзацы, а также отвечает за нужную нам штриховку.
Алгоритмы — это круто
В итоге задача сводится к созданию кастомного NSLayoutManadger и переопределению в нем нужного метода.
Теги: #разработка для iOS #разработка для iOS #разработка для iOS #дизайн для iOS #iOS UITextView #UITextView #NSLayoutManagerclass SelectionLayoutManager: NSLayoutManager { override func fillBackgroundRectArray(_ rectArray: UnsafePointer<CGRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: UIColor) {
-
День Радио На Рамблере
19 Oct, 24 -
Ошибки С++20. Итоги Встречи В Белфасте
19 Oct, 24 -
Мониторинг Активности Пользователей
19 Oct, 24 -
Вр - Выпуск №37
19 Oct, 24 -
Перчатки Для Любителей Зимних Видов Спорта.
19 Oct, 24