Подтвердить что ты не робот

UITextView с подсветкой синтаксиса

Возможный дубликат:
UITextView с подсветкой синтаксиса

Я уже нашел вопрос об этом, но на него не было полного ответа.

Существует ли Framework или библиотека, которая может выполнять выделение синтаксиса в UITextView, в частности выделение синтаксиса обнаружение) для Objective-C в iPhone.

Некоторые из моих идей о том, как это сделать:

  • NSAttributedString. Теперь доступно в iOS 3.2 и выше. Но как бы поместить NSAttributedString в UITextView?
  • UIWebView. Наложите его, когда пользователь закончит редактирование и покрасит текст в таблицы стилей CSS. Но как бы я сделал это в UIWebView, предоставив ему текст, а затем раскрасив его?
4b9b3361

Ответ 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. Но выбор текста такой же, как в ОС. Поэтому они должны скопировать исходный код в приложения. Очень честный подход;)

Ответ 2

С iOS 5 вы можете использовать UIWebView и установить contenteditable="true" в div. Это заставляет UIWebView открывать клавиатуру и позволяет пользователю напрямую вводить текст в DOM. Затем вы можете написать webapp, который выделяет синтаксис. Вы можете общаться с приложением cocoa с настраиваемыми URL-адресами.

Единственная проблема, с которой я сталкиваюсь, - это, похоже, не проверка орфографии.

Ответ 3

Я подклассифицировал a UITextView и overrode drawRect для реализации подсветки синтаксиса.

исходный код http://github.com/sakrist/SUITextView

Ответ 5

JTextView - это замена UITextView, которая поддерживает текстовое хранилище NSAttributedString. Это позволяет отображать богатый текст, но является неполным.

Ответ 6

Я мало знаю об обнаружении синтаксиса, но если вы хотите иметь несколько стилей в одном и том же UITextView, Три 20 пользовательского интерфейса это то, что вы должны посмотреть на

Вот еще один вопрос, который может относиться к вам: Каков наилучший способ реализовать подсветку синтаксиса исходного кода в Cocoa. Я не уверен, что это Mac или iPhone, но я думаю, что если вы объедините это и Three20, тогда вы сможете иметь свой собственный iPhone. Удачи.

Ответ 7

Если кто-то все еще ищет полное решение для этого, я знаю две библиотеки, которые предоставляют это:

  • Highlightr: библиотека Swift для подсветки синтаксиса, поддерживает сотни языков, но использует JS как backend. Тем не менее, это достаточно быстро для живого редактирования. ( Отказ от ответственности: я являюсь создателем этой библиотеки).
  • SyntaxKit: собственное решение от Sam Soffes, но на ранних стадиях развития. Должен поддерживать любой синтаксис TextMate в будущем. Это должен быть путь, когда библиотека достаточно зрелая.

Ответ 8

Я изучаю себя, как это сделать, немного поработал в поисковых системах и узнал об этом прекрасном cocoaPod:

https://cocoapods.org/?q=Highlightr

Желаю удачи!:)