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