![]()
Performant MacOS et IOS TextView avec des numéros de ligne et bien plus encore. (NSTEXTVIEW / UITEXTVIEW REIMPLIMATION)
L'objectif de ce projet est de construire le composant réutilisable de remplacement NSTEXTVIEW / UITEXTVIEY en utilisant TextKit 2 Framework. pour de nombreuses bonnes raisons.
Le composant est principalement développé pour répondre aux besoins Swift Studio en tant qu'éditeur de code source .
TextKit 2 a été annoncé lors de la WWDC 2021 en tant que remplacement de TextKit 1 pour la mise en page du texte et ainsi de suite. Apple a annoncé que NSTextView , le composant View spécialisé pour l'édition de texte, adoptera TextKit 2 et fournira une prise en charge le long de TextKit 1 bit. Alors que je commençais à en savoir plus sur NSTextView + TextKit2, j'ai réalisé qu'à partir d'aujourd'hui (février 2022), ni les classes NSTextView ni TextKit 2 ne sont entièrement fonctionnelles. En cours de route, j'ai signalé plusieurs rapports de bogues à Apple demandant DTS (support billets). Finalement, j'ai été bloqué par des bogues spécifiques qui m'ont poussé à démarrer ce projet.
La durabilité financière du projet est possible grâce aux contributions en cours de nos sponsors GitHub
SttextView est déjà bien adapté en tant que composant d'éditeur de texte. Cependant, il a encore besoin d'améliorations avant la sortie de V1.0
Suggérer ou voter pour de nouvelles fonctionnalités: Demandes de fonctionnalités
STTextView est distribué à l'aide du gestionnaire de packages Swift. Installez-le dans un projet en l'ajoutant comme une dépendance dans votre Package.swift manifester ou via des «dépendances de package» dans les paramètres du projet Xcode
let package = Package (
dependencies : [
. package ( url : " https://github.com/krzyzanowskim/STTextView " , from : " 1.0.0 " )
]
) Les applications de démonstration textedit et textedit.swiftui vous permet d'explorer la bibliothèque.
Les plugins dans un composant SttextView offrent des fonctionnalités et des personnalisations supplémentaires au-delà de l'affichage de texte simple. Ils améliorent les capacités de base de la vue texte en ajoutant des fonctionnalités telles que la mise en évidence de la syntaxe, le suivi du nombre de mots, etc. Ces plugins développent l'utilitaire de SttextView tout en maintenant une structure logicielle modulaire et adaptable.
Le TextView est une vue Swiftui qui enveloppe le sttextview.
import STTextViewSwiftUI
struct ContentView : View {
@ State private var text = AttributedString ( " Hello World! " )
@ State private var selection : NSRange ?
var body : some View {
TextView (
text : $text ,
selection : $selection ,
options : [ . wrapLines , . highlightSelectedLine ] ,
plugins : [ plugin1 ( ) , plugin2 ( ) ]
)
. textViewFont ( . preferredFont ( forTextStyle : . body ) )
}
} Le STTextView est une sous-classe NSView et peut être initialisé comme toute autre vue. Il a une API similaire à celle de NSTextView.
import STTextView
let textView = STTextView ( )
view . addSubview ( textView )(macOS) Ajouter à la vue de défilement
let textView = STTextView ( )
let scrollView = NSScrollView ( )
scrollView . documentView = textView let scrollView = STTextView . scrollableTextView ( )
let textView = scrollView . documentView as! STTextViewLa vue texte peut être personnalisée de diverses manières.
let paragraph = NSParagraphStyle . default . mutableCopy ( ) as! NSMutableParagraphStyle
// Set the line-height to 110%
paragraph . lineHeightMultiple = 1.1
paragraph . defaultTabInterval = 28
// Default Paragraph style
textView . typingAttributes [ . paragraphStyle ] = paragraph
// Set default font
textView . font = NSFont . monospacedSystemFont ( ofSize : 14 , weight : . regular )
// Set default text color
textView . textColor = . textColor
// Set text value
textView . text = " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ornare lobortis sem a vulputate. "
textView . addAttributes ( [ . foregroundColor : NSColor . red ] , range : NSRange ( location : 10 , length : 5 ) )
// Wrap/No wrap lines to editor width
textView . isHorizontallyResizable = true
// Highlight the selected line.
textView . highlightSelectedLine = trueAjouter la gouttière avec les numéros de ligne
textView . showLineNumbers = true
textView . gutterView ? . drawSeparator = true(macOS) Activez une interface de recherche et de repos en option dans une vue, généralement une vue de défilement.
textView . isIncrementalSearchingEnabled = true
textView . textFinder . incrementalSearchingShouldDimContentView = trueListe des problèmes et des bogues TextKit 2 liés à NSTextView et au Framework TextKit que j'ai signalé à Apple jusqu'à présent:
... Je suis conscient que la liste des problèmes n'est pas terminée. J'ai réussi à solution de contournement la plupart des problèmes de Sttextview.
(Le préfixe ST signifie " s wift s t udio" car SS n'est pas un bon préfixe depuis 1939)
Démarrez un nouveau sujet de discussion ou une demande de traction.
J'adorerais avoir de vos nouvelles! Contactez via x / twitter @krzyzanowskim, mastodon @ krzyzanowskim @ masodon.social.
Si vous créez une application open source sous une licence compatible avec la licence GPL GPL V3, vous pouvez utiliser SttextView aux termes du GPLV3.
Obtenez-en un à partir de 5 €.
Si vous souhaitez utiliser SttextView pour développer des produits et des applications non orientés, la licence commerciale est appropriée. Avec cette option, votre code source est maintenu propriétaire. Vous n'aurez pas à modifier l'ensemble de votre code source de demande en une licence open source. Acheter une licence commerciale Sttextview