Un éditeur de texte Swiftui simple et puissant pour iOS et macOS avec la solution de syntaxe en direct.
Mettez en évidence ce qui est important lorsque vos utilisateurs typent.
Prend en charge iOS 13.0+ et MacOS 10.15+.
Fichier -> Swift Packages -> Ajouter une dépendance du package et utiliser l'URL https://github.com/kyle-n/HighlightedTextEditor .
Ajoutez pod 'HighlightedTextEditor' à votre Podfile et exécutez pod install .
HighDedTexteditor applique des styles aux modèles regex correspondants de texte que vous fournissez. Vous pouvez appliquer plusieurs styles à chaque motif regex, comme le montre l'exemple ci-dessous.
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
}
}
}
}Remarquez que NSregulArexpression est instanciée une fois . Il ne doit pas être recréé chaque fois que la vue est redessinée. Cela aide les performances.
J'ai inclus quelques préréglages utiles pour la syntaxe mettant en évidence comme VARS statiques sur [HighlightRule] . Si vous avez des idées pour d'autres préréglages utiles, n'hésitez pas à ouvrir une demande de traction avec votre code prédéfini.
Les préréglages actuels comprennent:
markdownurlExemple d'utilisation d'un préréglage:
HighlightedTextEditor ( text : $text , highlightRules : . markdown ) J'ai également ajouté une variable prédéfinie, NSRegularExpression.all tout, pour sélectionner facilement une chaîne entière.
Exemple de l'utilisation:
HighlightedTextEditor ( text : $text , highlightRules : [
HighlightRule ( pattern : . all , formattingRule : TextFormattingRule ( key : . underlineStyle , value : NSUnderlineStyle . single . rawValue ) )
] ) | Paramètre | Taper | Description |
|---|---|---|
text | Reliure <string> | Contenu texte du champ |
highlightRules | [Highlightrule] | Modèles et formatage pour ces modèles |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : vous permet au développeur d'accéder aux objets Uikit ou AppKit sous-jacents utilisés par HightedTexteditor.onCommit(_ callback: @escaping () -> Void) : appelé lorsque l'utilisateur cesse de modifier.onEditingChanged(_ callback: @escaping () -> Void) : appelé lorsque l'utilisateur commence à éditer.onTextChange(_ callback: @escaping (_ editorContent: String) -> Void) : appelé chaque fois que text change.onSelectionChange(_ callback: @escaping (_ selectedRange: NSRange) -> Void).onSelectionChange(_ callback: @escaping (_ selectedRanges: [NSRange]) -> Void) (appkit uniquement) Passé comme paramètre aux rappels .introspect() . Utile pour personnaliser le comportement des éditeurs d'une manière ou d'une autre non pris en charge par l'API HLTE.
| Propriété | Taper | Description |
|---|---|---|
textView | UitextView ou nStextView | Pour personnaliser l'éditeur de texte UIKIT / APPKIT |
scrollView | NsscrollView? | Pour personnaliser l'emballage NSSCrollview. Renvoie nil dans Uikit |
| Paramètre | Taper | Description |
|---|---|---|
pattern | Nsregularexpression | Le contenu que vous souhaitez mettre en évidence. Devrait être instancié une fois pour les performances. |
formattingRule | Textformattingrule | Style s'appliquant à tous les texte correspondant au pattern |
formattingRules | [TextFormattingrule] | Tableau de styles s'appliquant à tous les texte correspondant au pattern |
TextFormattingRule propose trois initialiseurs différents qui définissent chacun un style. Pour définir plusieurs styles, utilisez plusieurs textformattingRules.
| Paramètre | Taper | Description |
|---|---|---|
key | NsattributedString.key | Le style à définir (ex .foregroundColor , .underlineStyle ) |
value | N'importe lequel | Le style réel appliqué à la key (ex pour key = .foregroundColor , value est UIColor.red ou NSColor.red ) |
| Paramètre | Taper | Description |
|---|---|---|
key | NsattributedString.key | Le style à définir (ex .foregroundColor , .underlineStyle ) |
calculateValue | (String, Range <String.Index>) -> tout | Un rappel qui calcule la valeur de key . Le premier paramètre est le contenu de texte correspondant par le regex, le deuxième est la plage du match dans la chaîne globale. |
value utilise une API plus ancienne et non typlée, vous devrez donc vérifier la documentation du type qui peut être transmis pour une key donnée.
| Paramètre | Taper | Description |
|---|---|---|
fontTraits | Uifontdescriptor.symbolictraitts ou nsfontdescriptor.symbolictraits | Attributs de formatage de texte (ex [.traitBold] dans uikit et .bold dans appkit) |
Si vous ciblez iOS 14 / MacOS 11, vous pouvez utiliser un initialiseur de commodité en profitant de nouvelles API Swiftui pour convertir les couleurs en UIColors ou NSColors.
| Paramètre | Taper | Description |
|---|---|---|
foregroundColor | Couleur | Couleur du texte |
fontTraits | Uifontdescriptor.symbolictraitts ou nsfontdescriptor.symbolictraits | Attributs de formatage de texte (ex [.traitBold] dans uikit et .bold dans appkit) |
Apple, dans sa sagesse, n'a pas activé ces fonctionnalités pour le Xcode 12 GM. Si vous utilisez la bêta Xcode et que vous souhaitez activer cet initialiseur, accédez à Project_name -> Targets -> Platform spécifié -> Build Paramètres -> Compiler Swift - Flags personnalisés et ajouter Flag -DBETA . <
Utilisez-vous HightedTexteditor dans votre application? J'aimerais vous présenter ici! Veuillez ouvrir une demande de traction qui ajoute une nouvelle balle à la liste ci-dessous avec le nom de votre application et un lien vers sa page TestFlight ou App Store.
Appkit Text Editor Code basé sur MaceditorTextView par Thiago Holanda.
Créé par Kyle Nazario.