![]()
MacOS performente e iOS TextView com números de linha e muito mais. (NSTEXTVIEW/UITEXTVIEL Reimplementation)
O objetivo deste projeto é criar o componente reutilizável do NSTEXTVIEW/UITEXTVIEW, utilizando a estrutura do TextKit 2. devido a muitas boas razões.
O componente é desenvolvido principalmente para atender às necessidades do Swift Studio como editor de código -fonte .
O TextKit 2 foi anunciado durante o WWDC 2021 como um Substituição de TextKit 1 para o layout de texto e outros enfeites. A Apple anunciou que NSTextView , o componente de exibição especializado para edição de texto, adotará o TextKit 2 e fornecerá suporte ao longo do TextKit 1 bit. Quando comecei a aprender mais sobre NSTextView + TextKit2, percebi que a partir de hoje (fevereiro de 2022), nem as classes NSTextView nem TextKit 2 são totalmente funcionais. Ao longo do caminho, relatei vários relatórios de bugs à Apple solicitando DTS (tickets de suporte). Eventualmente, fui bloqueado por bugs específicos que me levaram a iniciar este projeto.
A sustentabilidade financeira do projeto é possível graças às contribuições em andamento de nossos patrocinadores do GitHub
O SttextView já está adequado como um componente do editor de texto. No entanto, ele ainda precisa de melhorias antes do lançamento de v1.0
Sugerir ou votar em novos recursos: solicitações de recursos
STTextView é distribuído usando o Swift Package Manager. Instale -o em um projeto, adicionando -o como uma dependência no seu Package.swift
let package = Package (
dependencies : [
. package ( url : " https://github.com/krzyzanowskim/STTextView " , from : " 1.0.0 " )
]
) Os aplicativos de demonstração tenderem o texto e o texto.SwiftUi permite explorar a biblioteca.
Os plugins em um componente SttextView oferecem funcionalidades e personalizações adicionais além da exibição simples de texto. Eles aprimoram os recursos principais da visualização de texto adicionando recursos como destaque de sintaxe, rastreamento de contagem de palavras e muito mais. Esses plugins expandem o utilitário do SttextView, mantendo uma estrutura de software modular e adaptável.
O TextView é uma visualização Swiftui que envolve o 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 ) )
}
} A STTextView é uma subclasse NSView e pode ser inicializada como qualquer outra visualização. Possui uma API semelhante à do NSTEXTVIEW.
import STTextView
let textView = STTextView ( )
view . addSubview ( textView )(macOS) Adicionar à vista de rolagem
let textView = STTextView ( )
let scrollView = NSScrollView ( )
scrollView . documentView = textView let scrollView = STTextView . scrollableTextView ( )
let textView = scrollView . documentView as! STTextViewA visão de texto pode ser personalizada de várias maneiras.
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 = trueAdicione calha com números de linha
textView . showLineNumbers = true
textView . gutterView ? . drawSeparator = true(MacOS) Ative uma interface de pesquisa e substituição opcional dentro de uma exibição, geralmente uma exibição de rolagem.
textView . isIncrementalSearchingEnabled = true
textView . textFinder . incrementalSearchingShouldDimContentView = trueLista de questões e bugs textkit 2 relacionados ao NSTEXTVIEW e à estrutura do TextKit que relatei à Apple até agora:
... Estou ciente de que a lista de problemas não está completa. Consegui alternar a maioria dos problemas no SttextView.
(O prefixo ST significa " S Wift S t Udo" porque a SS não é boa prefixo desde 1939)
Inicie um novo tópico de discussão ou uma solicitação de tração.
Eu adoraria ouvir de você! Entre em contato via x/twitter @krzyzanowskim, mastodon @krzyzanowskim @mastodon.social.
Se você estiver criando um aplicativo de código aberto sob uma licença compatível com a licença GPL GPL V3, poderá usar o SttextView nos termos do GPLV3.
Obtenha um a partir de € 5.
Se você deseja usar a SttextView para desenvolver produtos e aplicativos sem origem, a licença comercial é apropriada. Com esta opção, seu código -fonte é mantido proprietário. Você não precisará alterar todo o código-fonte do aplicativo para uma licença de código aberto. Compre uma licença comercial da Sttextview