高性能的 macOS 和 iOS 文本视图,具有行号和更多功能。(NSTextView/UITextView 的重新实现)
此项目的目标是构建 NSTextView/UITextView 的可复用组件替代品,并利用 TextKit 2 框架。原因有很多。
该组件主要为 Swift Studio 的需求而开发,作为源代码编辑器。
TextKit 2 在 WWDC 2021 期间发布,作为 TextKit 1 的替代品,用于文本布局等。Apple 宣布专用于文本编辑的视图组件 NSTextView
将采用 TextKit 2,并提供与 TextKit 1 类似的支持。当我开始更多地了解 NSTextView
+ TextKit 2 时,我意识到截至今天(2022 年 2 月),NSTextView
和 TextKit 2 类都尚未完全发挥作用。在此过程中,我向 Apple 报告了几个错误报告,请求 DTS(支持票)。最终,我被特定的错误所阻碍,这促使我启动了这个项目。
该项目的财务可持续性得益于来自我们的 GitHub Sponsors 的持续贡献
建议或投票新功能:功能请求
STTextView
使用 Swift Package Manager 分发。通过在您的 Package.swift
清单文件中添加它作为依赖项,或通过 Xcode 项目设置中的“Package Dependencies”将其安装到项目中
let package = Package(
dependencies: [
.package(url: "https://github.com/krzyzanowskim/STTextView", from: "2.0.0")
]
)
演示应用程序 TextEdit 和 TextEdit.SwiftUI 让您探索该库。
STTextView 组件中的插件提供了超出简单文本显示之外的附加功能和自定义。它们通过添加语法高亮、字数统计等功能来增强文本视图的核心功能。这些插件扩展了 STTextView 的实用性,同时保持了模块化和可适应的软件结构。
TextView
是一个包装了 STTextView 的 SwiftUI 视图。
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
是一个 NSView
子类,可以像任何其他视图一样初始化。它具有类似于 NSTextView 的 API。
import STTextView
let textView = STTextView()
view.addSubview(textView)
(macOS)添加到滚动视图
let textView = STTextView()
let scrollView = NSScrollView()
scrollView.documentView = textView
let scrollView = STTextView.scrollableTextView()
let textView = scrollView.documentView as! STTextView
文本视图可以通过多种方式进行自定义。
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 = true
添加带有行号的边槽
textView.showLineNumbers = true
textView.gutterView?.drawSeparator = true
(macOS)在视图(通常是滚动视图)内启用可选的查找和替换界面。
textView.isIncrementalSearchingEnabled = true
textView.textFinder.incrementalSearchingShouldDimContentView = true
我向 Apple 报告的与 NSTextView 和 TextKit 框架相关的 TextKit 2 问题和错误列表
... 我知道问题列表并不完整。我设法在 STTextView 中解决大部分问题。
(ST 前缀代表 "Swift sTudio",因为自 1939 年以来 SS 不是一个好的前缀)
发起一个新的 讨论主题 或拉取请求。
我很乐意听到您的声音!通过 X/Twitter @krzyzanowskim, Mastodon @krzyzanowskim@mastodon.social 联系我。
通过使用本软件,您接受 许可证 的条款。STTextView 软件的版权归 Marcin Krzyżanowski 所有。如果根据 GPL v3.0 使用该软件不能满足您组织法务部门的要求,则可以购买商业许可证。如有更多详情,请随时联系。