HighlightTextEditor
一个简洁、强大的 SwiftUI 文本编辑器,适用于 iOS 和 macOS,具有实时语法高亮功能。
用户输入时突出显示重要内容。
安装
支持 iOS 13.0+ 和 macOS 10.15+。
Swift Package Manager
文件 -> Swift Packages -> 添加包依赖,并使用 URL https://github.com/kyle-n/HighlightedTextEditor
。
CocoaPods
将 pod 'HighlightedTextEditor'
添加到您的 Podfile
并运行 pod install
。
用法
高亮文本编辑器将样式应用于与您提供的正则表达式模式匹配的文本。您可以将多个样式应用于每个正则表达式模式,如下例所示。
import HighlightedTextEditor
// matches text between underscores
let betweenUnderscores = try! NSRegularExpression(pattern: "_[^_]+_", options: [])
struct ContentView: View {
@State private var text: String = "here is _bold, italicized, red text_"
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
.autocapitalizationType(.words)
.keyboardType(.numberPad)
.autocorrectionType(.no)
}
}
}
请注意,NSRegularExpression只实例化一次。它不应该在每次视图重绘时重建。这有助于性能。
预设
我在[HighlightRule]
中包含了一些有用的语法高亮预设作为静态变量。如果您有其他有用预设的想法,请随时通过提交特性请求并提供您的预设代码。
当前预设包括
markdown
url
使用预设的示例
HighlightedTextEditor(text: $text, highlightRules: .markdown)
API
HighlightedTextEditor
参数 | 类型 | 可选 | 描述 |
---|---|---|---|
text |
绑定<String> | 否 | 字段文本内容 |
highlightRules |
[HighlightRule] | 否 | 这些模式及其格式 |
onEditingChanged |
() -> Void | 是 | 当用户开始编辑时调用 |
onCommit |
() -> Void | 是 | 当用户停止编辑时调用 |
onTextChange |
(String) -> Void | 是 | 每当text 更改时调用 |
修饰符(UIKit)
.autocapitalizationType(_ type: UITextAutocapitalizationType)
.autocorrectionType(_ type: UITextAutocorrectionType)
.backgroundColor(_ color: UIColor)
.defaultColor(_ color: UIColor)
.defaultFont(_ font: UIFont)
.keyboardType(_ type: UIKeyboardType)
.insertionPointColor(_ color: UIColor)
.multilineTextAlignment(_ alignment: TextAlignment)
修饰符(AppKit)
允 许 文 档 背 景 在 颜 变更(_ allowsChange: Bool)
.backgroundColor(_ color: NSColor)
.defaultColor(_ color: NSColor)
.defaultFont(_ font: NSFont)
.drawsBackground(_ shouldDraw: Bool)
.insertionPointColor(_ color: NSColor)
.multilineTextAlignment(_ alignment: TextAlignment)
高 亮 规 则
参数 | 类型 | 描述 |
---|---|---|
图 样 |
NS正则表达式 | 您想高亮的内容。为了性能,应仅实例化一次。 |
格式化规则 |
文本格式化规则 | 应用于匹配pattern 的所有文本的样式 |
格式化规则 |
[文本格式化规则] | 应用与匹配pattern 的所有文本的样式的一组样式 |
文本格式化规则
TextFormattingRule提供三个不同的初始化器,每个初始化器设置一个样式。要设置多个样式,请使用多个TextFormattingRule。
参数 | 类型 | 描述 |
---|---|---|
键 |
NSAttributedString.Key | 要设置的样式(例如,.foregroundColor 、.underlineStyle ) |
值 |
Any | 应用于key 的实际样式(例如,对于key = .foregroundColor ,value 是UIColor.red 或NSColor.red ) |
参数 | 类型 | 描述 |
---|---|---|
键 |
NSAttributedString.Key | 要设置的样式(例如,.foregroundColor 、.underlineStyle ) |
calculateValue |
(String, Range |
一个回调,用于计算key 的值。第一个参数是与正则表达式匹配的文本内容,第二个是在整个字符串中匹配的范围。 |
value
使用了一个较旧的未类型化API,因此您需要检查相关文档来确定给定key
可以输入什么类型。
参数 | 类型 | 描述 |
---|---|---|
fontTraits |
UIFontDescriptor.SymbolicTraits或NSFontDescriptor.SymbolicTraits | 文本格式化属性(例如,UIKit中的[.traitBold] 和AppKit中的.bold ) |
如果您正在针对iOS 14/ macOS 11,您可以使用利用新的SwiftUI API将颜色转换为UIColors或NSColors的便利初始化器。
参数 | 类型 | 描述 |
---|---|---|
foregroundColor |
颜色 | 文本颜色 |
fontTraits |
UIFontDescriptor.SymbolicTraits或NSFontDescriptor.SymbolicTraits | 文本格式化属性(例如,UIKit中的[.traitBold] 和AppKit中的.bold ) |
苹果公司英明地没有启用XCode 12 GM的这些功能。如果您正在使用XCode beta版本并想启用此初始化器,请打开项目名称 -> 目标 -> 指定平台 -> 编译设置 -> Swift编译器 -> 自定义标志并添加标志-DBETA
。 <
特色应用
您在您的应用程序中使用HighlightedTextEditor吗?我很乐意在这里展示您!请打开一个pull request,在下面的列表中添加一个条目,包含您的应用程序的名称和其TestFlight或App Store页面的链接。
鸣谢
基于 MacEditorTextView 开发的 AppKit 文本编辑器代码,由 Thiago Holanda 提供。
由 Kyle Nazario 创建。