ОБНОВЛЕНИЕ: Начиная с iOS 7 и TextKit , подсветка синтаксиса стала легкой, как пирог. Смотрите не дальше для ознакомления (мной).
Предполагая, что вы хотите редактируемый компонент, надежды не так уж много.Краткий обзор, просто чтобы убедиться, что я покрываю все:
UITextView
: простой текст * только 1015 *, без (публичного) обхода.Но редактируемый .Нет возможности что-либо изменить, нет возможности получить геометрию и т. Д. Внутренне использует веб-представление.Каждый абзац представляет собой <div>
, который изменяется механизмом редактирования.Вы можете изменить DOm там, но это все частный API.Все закрытое, поэтому никаких опций нет. UIWebView
: html , поэтому его можно стилизовать, иметь встроенные изображения и т. Д. Я предполагаю (не глядя на это), чторанее упоминалось три 20 пользовательского интерфейса.Проблема: невозможно редактировать .Там нет (публичный) способ обойти это.Вы не можете получить выбор, получить доступ к DOM и т. Д. Без частного API и большого количества головной боли.Редактирование будет работать как в UITextView, но требует совершенно нового уровня головной боли.Тем не менее: private. CoreText
Framework: Начиная с iOS 3.2 очень очень хороший рендеринг движок.Но это все.Может непосредственно макет и рендеринг NSAttributesString
с.Тем не менее, нет никакого взаимодействия с пользователем.Без выделения текста, без ввода текста, без проверки орфографии, без замены, без выделения, нет, нет, нет, нет.Просто рендеринг.И довольно много работы, чтобы сделать это быстро на старых устройствах с длинными текстами. UITextInput
Протокол: позволяет взаимодействовать с клавиатурой и захватывать ввод текста .Также имеется базовая замена текста.Проблема: только ввод текста, плохо документировано.Нет выделения текста и т. Д. (См. Выше).
Итак, мы здесь.Два полностью функциональных компонента, в которых отсутствует центральная функция, и два частичных решения, в которых отсутствует недостающее звено.Вот все жизнеспособные подходы, которые я могу придумать:
- Попросите пользователя отредактировать
UITextView
без стиля и отобразить содержимое в стиле UIWebView
.Для последнего вы можете использовать вещь Three20. - Постройте недостающее звено между
CoreText
и UITextInput
.Это включает, но не ограничивается этим, выбор текста, выделение, цвета фона, хранение и управление текстом, эффективность, проверку орфографии и т. Д. Некоторые из них предоставляются системными платформами, но все еще требуют большой интеграции. - Отправьте сообщение об ошибке и дождитесь появления публичного API (мой личный подход).
- Убедите Apple снова разрешить использование частного API и связываться с
UItextView
s DOM.
Omni Group выбрала второй подход и создала редактируемое текстовое представление.Вы можете найти его в OmniUI framework.Однако эта реализация далека от совершенства.(по крайней мере это было, когда я последний раз проверял несколько месяцев назад).Они изо всех сил старались, но все же не смогли достичь совершенства Apple в взаимодействии с пользователем.Apple, должно быть, потратила не менее нескольких человеко-лет на то, чтобы взаимодействовать только с пользовательским интерфейсом с выделением и редактированием текста.Ничего не поделаешь дома, и, как кажется, даже для компаний, таких как omni group.
Во всем этом есть интересный аспект: iWork.Apple утверждает, что не использует в них никаких частных API.Но выбор текста тот же, что и в ОС.Таким образом, они должны были скопировать источник фреймворка в приложения.Очень честный подход;)