Простой, мощный текстовый редактор Swiftui для iOS и MacOS с выделением живого синтаксиса.
Выделите то, что важно, как тип ваших пользователей.
Поддерживает iOS 13,0+ и macOS 10.15+.
File -> Swift Packages -> Добавить зависимость пакета и использовать URL https://github.com/kyle-n/HighlightedTextEditor .
Добавьте pod 'HighlightedTextEditor' в свой Podfile и запустите pod install .
HightedTextEditor применяет стили к образованию режима REGEX, соответствующего текстам, которые вы предоставляете. Вы можете применить несколько стилей к каждому рисунку регуляции, как показано в примере ниже.
import HighlightedTextEditor
// matches text between underscores
let betweenUnderscores = try ! NSRegularExpression ( pattern : " _[^_]+_ " , options : [ ] )
struct ContentView : View {
@ State private var text : String = " "
private let rules : [ HighlightRule ] = [
HighlightRule ( pattern : betweenUnderscores , formattingRules : [
TextFormattingRule ( fontTraits : [ . traitItalic , . traitBold ] ) ,
TextFormattingRule ( key : . foregroundColor , value : UIColor . red ) ,
TextFormattingRule ( key : . underlineStyle ) { content , range in
if content . count > 10 { return NSUnderlineStyle . double . rawValue }
else { return NSUnderlineStyle . single . rawValue }
}
] )
]
var body : some View {
VStack {
HighlightedTextEditor ( text : $text , highlightRules : rules )
// optional modifiers
. onCommit { print ( " commited " ) }
. onEditingChanged { print ( " editing changed " ) }
. onTextChange { print ( " latest text value " , $0 ) }
. onSelectionChange { ( range : NSRange ) in
print ( range )
}
. introspect { editor in
// access underlying UITextView or NSTextView
editor . textView . backgroundColor = . green
}
}
}
}Обратите внимание, что nsregularexpression создается один раз . Его не следует воссоздать каждый раз, когда вид перерисовывается. Это помогает производительности.
Я включил несколько полезных заданий для синтаксиса, выделяющего в качестве статических VAR на [HighlightRule] . Если у вас есть идеи для других полезных пресетов, пожалуйста, не стесняйтесь открыть запрос на привлечение с помощью вашего предустановленного кода.
Текущие предустановки включают:
markdownurlПример использования предустановки:
HighlightedTextEditor ( text : $text , highlightRules : . markdown ) Я также добавил заданную переменную, NSRegularExpression.all , чтобы легко выбрать целую строку.
Пример использования:
HighlightedTextEditor ( text : $text , highlightRules : [
HighlightRule ( pattern : . all , formattingRule : TextFormattingRule ( key : . underlineStyle , value : NSUnderlineStyle . single . rawValue ) )
] ) | Параметр | Тип | Описание |
|---|---|---|
text | Привязка <string> | Текстовое содержание поля |
highlightRules | [Highlightrule] | Шаблоны и форматирование этих моделей |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : позволяет разработчику получить доступ к базовым объектам uikit или appkit, используемым AltainedTextEditor.onCommit(_ callback: @escaping () -> Void) : вызывается, когда пользователь перестает редактировать.onEditingChanged(_ callback: @escaping () -> Void) : вызывается, когда пользователь начинает редактировать.onTextChange(_ callback: @escaping (_ editorContent: String) -> Void) : вызывается всякий раз, когда изменяется text.onSelectionChange(_ callback: @escaping (_ selectedRange: NSRange) -> Void).onSelectionChange(_ callback: @escaping (_ selectedRanges: [NSRange]) -> Void) (только Appkit) Передается как параметр .introspect() обратные вызовы. Полезно для настройки поведения редактора каким -то образом не поддерживается HLTE API.
| Свойство | Тип | Описание |
|---|---|---|
textView | UitextView или nstextView | Для настройки текстового редактора uikit/appkit |
scrollView | Nsscrollview? | Для настройки NSScrollview Обертки. Возвращает nil в uikit |
| Параметр | Тип | Описание |
|---|---|---|
pattern | Nsregularexpression | Контент, который вы хотите выделить. Должен быть создан один раз для производительности. |
formattingRule | TextFormattingRule | Стиль применяется ко всем текстам, соответствующим pattern |
formattingRules | [TextFormattingRule] | Массив стилей, применяемых ко всем текстам, соответствующим pattern |
TextFormattingRule предлагает три различных инициализатора, которые каждый устанавливает один стиль. Чтобы установить несколько стилей, используйте несколько TextformattingRules.
| Параметр | Тип | Описание |
|---|---|---|
key | NsattributedString.Key | Стиль для установки (Ex .foregroundColor .underlineStyle |
value | Любой | Фактический стиль, применяемый к key (ex для key = .foregroundColor , value UIColor.red или NSColor.red ) |
| Параметр | Тип | Описание |
|---|---|---|
key | NsattributedString.Key | Стиль для установки (Ex .foregroundColor .underlineStyle |
calculateValue | (String, Range <String.index>) -> Любой | Обратный вызов, который вычисляет значение для key . Первый параметр - это текстовое содержимое, сопоставленное с помощью корпорации, во -вторых, это диапазон матчей в общей строке. |
value использует более старый, непредвзятый API, поэтому вам придется проверить документацию, на какой тип может быть передан для данного key .
| Параметр | Тип | Описание |
|---|---|---|
fontTraits | Uifontdescriptor.symbolictraits или nsfontdescriptor.symbolictraits | Атрибуты форматирования текста (ex [.traitBold] в uikit и .bold in appkit) |
Если вы нацелены на iOS 14 / macOS 11, вы можете использовать удобный инициатор, используя преимущества новых API Swiftui для преобразования цветов в UIColors или NSCOLORS.
| Параметр | Тип | Описание |
|---|---|---|
foregroundColor | Цвет | Цвет текста |
fontTraits | Uifontdescriptor.symbolictraits или nsfontdescriptor.symbolictraits | Атрибуты форматирования текста (ex [.traitBold] в uikit и .bold in appkit) |
Apple, в своей мудрости, не включила эти функции для XCODE 12 GM. Если вы используете бета -версию Xcode и хотите включить этот инициализатор, перейдите к Project_name -> Targets -> Указанная платформа -> Настройки сборки -> Swift Compileer -Custom Flags и добавьте флаг -DBETA . <
Вы используете AntalyedTextExtitor в своем приложении? Я хотел бы представить вас здесь! Пожалуйста, откройте запрос на привлечение, который добавляет новую пулю в список ниже с именем вашего приложения и ссылку на его страницу Testflight или App Store.
Appkit Text Editor Код на основе MaceditortextView Thiago Holanda.
Создан Кайлом Назарио.