Un editor de texto Swiftui simple y poderoso para iOS y MacOS con resaltado de sintaxis en vivo.
Destaca lo importante como el tipo de usuarios.
Admite iOS 13.0+ y MacOS 10.15+.
Archivo -> Swift Packages -> Agregar dependencia del paquete y use la URL https://github.com/kyle-n/HighlightedTextEditor .
Agregue pod 'HighlightedTextEditor' a su Podfile y ejecute pod install .
StoppecedTextEditor aplica estilos a los patrones de reglas de coincidencia de texto que proporciona. Puede aplicar múltiples estilos a cada patrón regex, como se muestra en el ejemplo a continuación.
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 la NsregulareExpression se instancia una vez . No debe recrearse cada vez que se reduzca la vista. Esto ayuda al rendimiento.
He incluido algunos ajustes preestablecidos útiles para resaltar sintaxis como vars estáticos en [HighlightRule] . Si tiene ideas para otros presets útiles, no dude en abrir una solicitud de extracción con su código preestablecido.
Los preajustes actuales incluyen:
markdownurlEjemplo de uso de un preajuste:
HighlightedTextEditor ( text : $text , highlightRules : . markdown ) También he agregado una variable preestablecida, NSRegularExpression.all , para seleccionar fácilmente una cadena completa.
Ejemplo de usarlo:
HighlightedTextEditor ( text : $text , highlightRules : [
HighlightRule ( pattern : . all , formattingRule : TextFormattingRule ( key : . underlineStyle , value : NSUnderlineStyle . single . rawValue ) )
] ) | Parámetro | Tipo | Descripción |
|---|---|---|
text | Atinguidad <String> | Contenido de texto del campo |
highlightRules | [Highlightrul] | Patrones y formateo para esos patrones |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : le permite al desarrollador acceder a los objetos UIKIT o Appkit subyacentes utilizados por DestinoTeTextEditor.onCommit(_ callback: @escaping () -> Void) : llamado cuando el usuario deja de editar.onEditingChanged(_ callback: @escaping () -> Void) : llamado cuando el usuario comienza a editar.onTextChange(_ callback: @escaping (_ editorContent: String) -> Void) : llamado cuando text cambia.onSelectionChange(_ callback: @escaping (_ selectedRange: NSRange) -> Void).onSelectionChange(_ callback: @escaping (_ selectedRanges: [NSRange]) -> Void) (solo appkit) Pasó como parámetro a .introspect() devoluciones de llamada. Útil para personalizar el comportamiento del editor de alguna manera no compatible con la API HLTE.
| Propiedad | Tipo | Descripción |
|---|---|---|
textView | UitextView o nstextView | Para personalizar el editor de texto UIKIT/AppKit |
scrollView | ¿NSSCROLLVIEW? | Para personalizar el envoltorio NSSCrollView. Devuelve nil en uikit |
| Parámetro | Tipo | Descripción |
|---|---|---|
pattern | Nsregularexpression | El contenido que desea resaltar. Debe instanciarse una vez para su rendimiento. |
formattingRule | TextFormatingrule | Estilo aplicando a todos los texto que coinciden con el pattern |
formattingRules | [TextFormatingRule] | Variedad de estilos que se aplican a todos los texto que coinciden con el pattern |
TextFormatingRule ofrece tres inicializadores diferentes que cada uno establece un estilo. Para establecer múltiples estilos, use múltiples textFormatingrules.
| Parámetro | Tipo | Descripción |
|---|---|---|
key | Nsattributedstring.key | El estilo para establecer (ex .foregroundColor , .underlineStyle ) |
value | Cualquier | El estilo real aplicado a la key (ex para key = .foregroundColor , value es UIColor.red o NSColor.red ) |
| Parámetro | Tipo | Descripción |
|---|---|---|
key | Nsattributedstring.key | El estilo para establecer (ex .foregroundColor , .underlineStyle ) |
calculateValue | (Cadena, rango <String.index>) -> cualquier | Una devolución de llamada que calcula el valor para key . El primer parámetro es el contenido de texto coincidente por el RegEx, el segundo es el rango de la coincidencia en la cadena general. |
value utiliza una API más antigua y sin tipos, por lo que tendrá que verificar la documentación de qué tipo se puede pasar para una key determinada.
| Parámetro | Tipo | Descripción |
|---|---|---|
fontTraits | Uifontdescriptor.symbolicTraits o nsfontdescriptor.symbolicTraits | Atributos de formato de texto (ex [.traitBold] en Uikit y .bold en Appkit) |
Si se dirige a iOS 14 / MacOS 11, puede usar un inicializador de conveniencia aprovechando las nuevas API Swiftui para convertir los colores en Uicolor o NSColors.
| Parámetro | Tipo | Descripción |
|---|---|---|
foregroundColor | Color | Color del texto |
fontTraits | Uifontdescriptor.symbolicTraits o nsfontdescriptor.symbolicTraits | Atributos de formato de texto (ex [.traitBold] en Uikit y .bold en Appkit) |
Apple, en su sabiduría, no ha habilitado estas características para el Xcode 12 GM. Si está utilizando la beta Xcode y desea habilitar este inicializador, vaya a Project_Name -> Targets -> Plataforma especificada -> Configuración de compilación -> Compilador Swift -Banderas personalizadas y agregue Flag -DBETA . <
¿Está utilizando resowedTextEditor en su aplicación? ¡Me encantaría presentarte aquí! Abra una solicitud de extracción que agrega una nueva bala a la lista a continuación con el nombre de su aplicación y un enlace a su página TestFlight o App Store.
Código del editor de texto de Appkit basado en MaceditortextView por Thiago Holanda.
Creado por Kyle Nazario.