Um editor de texto Swiftui simples e poderoso para iOS e macOS com destaque de sintaxe ao vivo.
Destaque o que é importante como seu tipo de usuários.
Suporta iOS 13.0+ e MacOS 10.15+.
Arquivo -> Pacotes SWIFT -> Adicionar dependência do pacote e use o URL https://github.com/kyle-n/HighlightedTextEditor .
Adicione pod 'HighlightedTextEditor' ao seu Podfile e execute pod install .
DestaquedExtexEditor aplica estilos aos padrões de regex correspondentes de texto que você fornece. Você pode aplicar vários estilos a cada padrão regex, como mostrado no exemplo abaixo.
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
}
}
}
}Observe que a NSREGULAREXPRESS é instanciada uma vez . Não deve ser recriado toda vez que a vista é redesenhada. Isso ajuda o desempenho.
Incluí algumas predefinições úteis para destaque da sintaxe como vars estáticos em [HighlightRule] . Se você tiver idéias para outras predefinições úteis, sinta -se à vontade para abrir uma solicitação de tração com o código predefinido.
As predefinições atuais incluem:
markdownurlExemplo de usar uma predefinição:
HighlightedTextEditor ( text : $text , highlightRules : . markdown ) Também adicionei uma variável predefinida, NSRegularExpression.all , para selecionar facilmente uma string inteira.
Exemplo de usá -lo:
HighlightedTextEditor ( text : $text , highlightRules : [
HighlightRule ( pattern : . all , formattingRule : TextFormattingRule ( key : . underlineStyle , value : NSUnderlineStyle . single . rawValue ) )
] ) | Parâmetro | Tipo | Descrição |
|---|---|---|
text | Ligação <String> | Conteúdo de texto do campo |
highlightRules | [HighLightrule] | Padrões e formatação para esses padrões |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : permite que o desenvolvedor acesse os objetos subjacentes do UIKIT ou do AppKit usados pelo destaquetextExtEditor.onCommit(_ callback: @escaping () -> Void) : chamado quando o usuário parar de editar.onEditingChanged(_ callback: @escaping () -> Void) : chamado quando o usuário começa a editar.onTextChange(_ callback: @escaping (_ editorContent: String) -> Void) : chamado sempre que text muda.onSelectionChange(_ callback: @escaping (_ selectedRange: NSRange) -> Void).onSelectionChange(_ callback: @escaping (_ selectedRanges: [NSRange]) -> Void) (somente Appkit) Passado como um parâmetro para retornos de chamada .introspect() . Útil para personalizar o comportamento do editor de alguma forma não suportado pela API HLTE.
| Propriedade | Tipo | Descrição |
|---|---|---|
textView | UITEXTVIEW ou NSTEXTVIEW | Para personalizar o editor de texto Uikit/Appkit |
scrollView | NSSCROLLVIEW? | Para personalizar o NSSCROLLVIEW Wrapper. Retorna nil em Uikit |
| Parâmetro | Tipo | Descrição |
|---|---|---|
pattern | NSREGULAREXPRESS | O conteúdo que você deseja destacar. Deve ser instanciado uma vez para o desempenho. |
formattingRule | TextFormattingRule | Estilo aplicando a todo o texto que corresponde ao pattern |
formattingRules | [TextFormattingRule] | Grânia de estilos aplicando a todo o texto que corresponde ao pattern |
O TextFormattingRule oferece três inicializadores diferentes que cada um definiu um estilo. Para definir vários estilos, use várias empresas de texto de texto.
| Parâmetro | Tipo | Descrição |
|---|---|---|
key | NsattributedString.Key | O estilo a serem definido (ex .foregroundColor , .underlineStyle ) |
value | Qualquer | O estilo real aplicado à key (ex para key = .foregroundColor , value é UIColor.red ou NSColor.red ) |
| Parâmetro | Tipo | Descrição |
|---|---|---|
key | NsattributedString.Key | O estilo a serem definido (ex .foregroundColor , .underlineStyle ) |
calculateValue | (String, Range <String.index>) -> qualquer | Um retorno de chamada que calcula o valor da key . O primeiro parâmetro é o conteúdo de texto correspondido pelo regex, o segundo é o intervalo da correspondência na string geral. |
value usa uma API mais antiga e sem tons, para que você precise verificar a documentação de que tipo pode ser transmitido para uma determinada key .
| Parâmetro | Tipo | Descrição |
|---|---|---|
fontTraits | UifontDescriptor.symbolictraits ou nsfontDescriptor.symbolictraits | Atributos de formatação de texto (ex [.traitBold] em Uikit e .bold em Appkit) |
Se você estiver segmentando o iOS 14 / MacOS 11, poderá usar um inicializador de conveniência aproveitando as novas APIs Swiftui para converter cores em uicolors ou nscolors.
| Parâmetro | Tipo | Descrição |
|---|---|---|
foregroundColor | Cor | Cor do texto |
fontTraits | UifontDescriptor.symbolictraits ou nsfontDescriptor.symbolictraits | Atributos de formatação de texto (ex [.traitBold] em Uikit e .bold em Appkit) |
A Apple, em sua sabedoria, não ativou esses recursos para o Xcode 12 Gm. Se você estiver usando o xcode beta e desejar ativar este inicializador, vá para Project_Name -> Targets -> Plataforma especificada -> Configurações de construção -> Swift Compiler -sinalizadores personalizados e adicione o flag -DBETA . <
Você está usando o DestactExtexteditor em seu aplicativo? Eu adoraria apresentá -lo aqui! Abra uma solicitação de tração que adiciona uma nova bala à lista abaixo com o nome do seu aplicativo e um link para a página Testflight ou App Store.
Código do editor de texto Appkit com base no MaceditorTextView de Thiago Holanda.
Criado por Kyle Nazario.