![]()
Performant macOS dan iOS textView dengan nomor baris dan banyak lagi. (NSTEXTVIEW/UITEXTVIEW Reimplementation)
Tujuan dari proyek ini adalah untuk membangun komponen yang dapat digunakan kembali NSTEXTVIEW/UITEXTVIEW menggunakan kerangka kerja TextKit 2. karena banyak alasan bagus.
Komponen ini terutama dikembangkan untuk melayani kebutuhan studio Swift sebagai editor kode sumber .
TextKit 2 diumumkan selama WWDC 2021 sebagai pengganti TextKit 1 untuk tata letak teks dan yang lainnya. Apple mengumumkan bahwa NSTextView , komponen tampilan yang khusus untuk pengeditan teks, akan mengadopsi TextKit 2 dan memberikan dukungan di sepanjang TextKit 1 bit. Ketika saya mulai mempelajari lebih lanjut tentang NSTextView + TextKit2, saya menyadari bahwa pada hari ini (Februari 2022), baik kelas NSTextView maupun TextKit 2 tidak berfungsi penuh. Sepanjang jalan, saya melaporkan beberapa laporan bug ke Apple yang meminta DTS (tiket dukungan). Akhirnya, saya diblokir oleh bug spesifik yang mendorong saya untuk memulai proyek ini.
Keberlanjutan finansial proyek dimungkinkan berkat kontribusi berkelanjutan dari sponsor GitHub kami
SttextView sudah sangat cocok sebagai komponen editor teks. Namun, masih membutuhkan perbaikan sebelum rilis v1.0
Menyarankan atau memilih fitur baru: permintaan fitur
STTextView didistribusikan menggunakan Swift Package Manager. Instal dalam proyek dengan menambahkannya sebagai ketergantungan dalam Package.swift Anda.
let package = Package (
dependencies : [
. package ( url : " https://github.com/krzyzanowskim/STTextView " , from : " 1.0.0 " )
]
) Aplikasi demo TextEdit dan TextEdit.swiftUi memungkinkan Anda menjelajahi perpustakaan.
Plugin dalam komponen SttextView menawarkan fungsionalitas dan kustomisasi tambahan di luar tampilan teks sederhana. Mereka meningkatkan kemampuan inti dari tampilan teks dengan menambahkan fitur seperti penyorotan sintaks, pelacakan jumlah kata, dan banyak lagi. Plugin ini memperluas utilitas SttextView sambil mempertahankan struktur perangkat lunak yang modular dan mudah beradaptasi.
TextView adalah tampilan SwiftUi yang membungkus 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 ) )
}
} STTextView adalah subkelas NSView dan dapat diinisialisasi seperti tampilan lainnya. Ini memiliki API yang mirip dengan NStextView.
import STTextView
let textView = STTextView ( )
view . addSubview ( textView )(macOS) Tambahkan ke tampilan gulir
let textView = STTextView ( )
let scrollView = NSScrollView ( )
scrollView . documentView = textView let scrollView = STTextView . scrollableTextView ( )
let textView = scrollView . documentView as! STTextViewTampilan teks dapat disesuaikan dengan berbagai cara.
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 = trueTambahkan Gutter dengan nomor baris
textView . showLineNumbers = true
textView . gutterView ? . drawSeparator = true(MacOS) Mengaktifkan antarmuka pencarian dan ganti opsional di dalam tampilan, biasanya tampilan gulir.
textView . isIncrementalSearchingEnabled = true
textView . textFinder . incrementalSearchingShouldDimContentView = trueDaftar Masalah TextKit 2 dan Bug yang Terkait dengan NSTEXTVIEW dan Kerangka TextKit yang saya laporkan ke Apple sejauh ini:
... Saya sadar bahwa daftar masalah tidak lengkap. Saya berhasil mengatasi sebagian besar masalah di SttextView.
( ST Prefix adalah singkatan dari " s wift s t udio" karena ss tidak awalan yang baik sejak 1939)
Mulai topik diskusi baru atau permintaan tarik.
Saya ingin mendengar dari Anda! Hubungi melalui x/twitter @krzyzanowskim, mastodon @krzyzanowskim @mastodon.social.
Jika Anda membuat aplikasi open-source di bawah lisensi yang kompatibel dengan Lisensi GNU GPL V3, Anda dapat menggunakan SttextView berdasarkan ketentuan GPLV3.
Dapatkan satu mulai dari € 5.
Jika Anda ingin menggunakan SttextView untuk mengembangkan produk dan aplikasi yang tidak terbuka, lisensi komersial sesuai. Dengan opsi ini, kode sumber Anda disimpan. Anda tidak perlu mengubah seluruh kode sumber aplikasi Anda menjadi lisensi sumber terbuka. Beli Lisensi Komersial SttextView