Ein einfacher, leistungsstarker Swiftui -Texteditor für iOS und macOS mit Live -Syntax -Hervorhebung.
Heben Sie hervor, was wichtig ist, wenn Ihre Benutzer tippen.
Unterstützt iOS 13.0+ und macOS 10.15+.
Datei -> Swift -Pakete -> Paketabhängigkeit hinzufügen und verwenden Sie den URL https://github.com/kyle-n/HighlightedTextEditor .
Fügen Sie pod 'HighlightedTextEditor' zu Ihrer Podfile hinzu und führen Sie pod install aus.
MarkedTexteditor wendet Stile auf die von Ihnen bereitgestellten Textmuster von REGEX -Mustern an. Sie können mehrere Stile auf jedes Regex -Muster anwenden, wie im folgenden Beispiel gezeigt.
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
}
}
}
}Beachten Sie, dass die NsRegularexpression einmal instanziiert wird. Es sollte nicht jedes Mal nachgebaut werden, wenn die Aussicht neu gezeichnet wird. Dies hilft der Leistung.
Ich habe einige nützliche Voreinstellungen für die Syntax -Hervorhebung als statische VARs auf [HighlightRule] aufgenommen. Wenn Sie Ideen für andere nützliche Voreinstellungen haben, können Sie eine Pull -Anfrage mit Ihrem voreingestellten Code öffnen.
Aktuelle Voreinstellungen umfassen:
markdownurlBeispiel für die Verwendung eines Voreinsatzes:
HighlightedTextEditor ( text : $text , highlightRules : . markdown ) Ich habe auch eine voreingestellte Variable, NSRegularExpression.all , für die einfache Auswahl einer ganzen Zeichenfolge hinzugefügt.
Beispiel für die Verwendung:
HighlightedTextEditor ( text : $text , highlightRules : [
HighlightRule ( pattern : . all , formattingRule : TextFormattingRule ( key : . underlineStyle , value : NSUnderlineStyle . single . rawValue ) )
] ) | Parameter | Typ | Beschreibung |
|---|---|---|
text | Bindung <string> | Textinhalt des Feldes |
highlightRules | [Highlightrule] | Muster und Formatierung für diese Muster |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : Ermöglicht Ihnen der Entwickler, auf die zugrunde liegenden UIKIT- oder Appkit -Objekte zuzugreifen, die von MarkedTextextex verwendet werden.onCommit(_ callback: @escaping () -> Void) : Aufgerufen, wenn der Benutzer aufhört zu bearbeiten.onEditingChanged(_ callback: @escaping () -> Void) : Aufgerufen, wenn der Benutzer mit der Bearbeitung beginnt.onTextChange(_ callback: @escaping (_ editorContent: String) -> Void) : Wenn text sich ändert, wird aufgerufen.onSelectionChange(_ callback: @escaping (_ selectedRange: NSRange) -> Void).onSelectionChange(_ callback: @escaping (_ selectedRanges: [NSRange]) -> Void) (nur Appkit) Als Parameter an .introspect() zurückgezogen. Nützlich, um das Verhalten des Editors auf irgendeine Weise anzupassen, die von der HLTE -API nicht unterstützt wird.
| Eigentum | Typ | Beschreibung |
|---|---|---|
textView | UitextView oder nStextView | Für das Anpassen des Texteditors UIKIT/Appkit |
scrollView | NSSSCROLLVIEW? | Zum Anpassen des NSSSCROLLView -Wrappers. Gibt nil in Uikit zurück |
| Parameter | Typ | Beschreibung |
|---|---|---|
pattern | Nsregularexpression | Der Inhalt, den Sie hervorheben möchten. Sollte einmal für die Leistung instanziiert werden. |
formattingRule | TextFormattingRule | Stil, der sich auf alle Text anwendet, die dem pattern entsprechen |
formattingRules | [TextFormattingRule] | Array von Stilen, die auf alle Text anwenden, die dem pattern entsprechen |
TextFormattingRule bietet drei verschiedene Initialisierer, die jeden Stil festlegen. Verwenden Sie zum Festlegen mehrerer Stile mehrere TextFormattingRules.
| Parameter | Typ | Beschreibung |
|---|---|---|
key | NsattributedString.Key | Der Stil zu setzen (Ex .foregroundColor , .underlineStyle ) |
value | Beliebig | Der tatsächliche Stil, der auf den key angewendet wird (Ex für key = .foregroundColor , value ist UIColor.red oder NSColor.red ) |
| Parameter | Typ | Beschreibung |
|---|---|---|
key | NsattributedString.Key | Der Stil zu setzen (Ex .foregroundColor , .underlineStyle ) |
calculateValue | (String, Bereich <string.index>) -> Any | Ein Rückruf, der den Wert für key berechnet. Der erste Parameter ist der von der Regex übereinstimmende Textinhalt, der zweite ist der Bereich der Match in der Gesamtzeichenfolge. |
value verwendet eine ältere, nicht typeped API, sodass Sie die Dokumentation überprüfen müssen, in welchem Typ für einen bestimmten key übergeben werden kann.
| Parameter | Typ | Beschreibung |
|---|---|---|
fontTraits | UifontDescriptor.symbolictraits oder nsfontDescriptor.symbolictraits | Textformatierungsattribute (Ex [.traitBold] in UIKIT und .bold in AppKit) |
Wenn Sie auf iOS 14 / macOS 11 abzielen, können Sie einen Convenience -Initialisierer verwenden, der neue Swiftui -APIs nutzt, um Farben in UIColors oder NSColors umzuwandeln.
| Parameter | Typ | Beschreibung |
|---|---|---|
foregroundColor | Farbe | Färbe des Textes |
fontTraits | UifontDescriptor.symbolictraits oder nsfontDescriptor.symbolictraits | Textformatierungsattribute (Ex [.traitBold] in UIKIT und .bold in AppKit) |
In seiner Weisheit hat Apple diese Funktionen für den Xcode 12 g nicht aktiviert. Wenn Sie die XCode -Beta verwenden und diesen Initialisierer aktivieren möchten, gehen Sie zu Project_Name -> Targets -> angegebene Plattform -> Build -Einstellungen -> Swift -Compiler -benutzerdefinierte Flags und fügen Sie Flag -DBETA hinzu. <
Verwenden Sie in Ihrer App hervorgehobene Markextextex? Ich würde dich gerne hier vorstellen! Bitte öffnen Sie eine Pull -Anfrage, die der folgenden Liste eine neue Kugel mit dem Namen Ihrer App und einem Link zu der Seite TestFlight oder App Store hinzufügt.
Appkit -Texteditorcode basierend auf MacEditortextView von Thiago Holanda.
Erstellt von Kyle Nazario.