HighlightTextEditor 2.1.2

HighlightTextEditor 2.1.2

Kyle Nazario 维护。



  • 作者:
  • Kyle Nazario

HighlightTextEditor

一个简洁、强大的 SwiftUI 文本编辑器,适用于 iOS 和 macOS,具有实时语法高亮功能。

用户输入时突出显示重要内容。

HighlightedTextEditor demo

安装

支持 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 = .foregroundColorvalueUIColor.redNSColor.red
参数 类型 描述
NSAttributedString.Key 要设置的样式(例如,.foregroundColor.underlineStyle
calculateValue (String, Range) -> Any 一个回调,用于计算key的值。第一个参数是与正则表达式匹配的文本内容,第二个是在整个字符串中匹配的范围。

value使用了一个较旧的未类型化API,因此您需要检查相关文档来确定给定key可以输入什么类型。

参数 类型 描述
fontTraits UIFontDescriptor.SymbolicTraitsNSFontDescriptor.SymbolicTraits 文本格式化属性(例如,UIKit中的[.traitBold]和AppKit中的.bold

如果您正在针对iOS 14/ macOS 11,您可以使用利用新的SwiftUI API将颜色转换为UIColors或NSColors的便利初始化器。

参数 类型 描述
foregroundColor 颜色 文本颜色
fontTraits UIFontDescriptor.SymbolicTraitsNSFontDescriptor.SymbolicTraits 文本格式化属性(例如,UIKit中的[.traitBold]和AppKit中的.bold

苹果公司英明地没有启用XCode 12 GM的这些功能。如果您正在使用XCode beta版本并想启用此初始化器,请打开项目名称 -> 目标 -> 指定平台 -> 编译设置 -> Swift编译器 -> 自定义标志并添加标志-DBETA。 <

特色应用

您在您的应用程序中使用HighlightedTextEditor吗?我很乐意在这里展示您!请打开一个pull request,在下面的列表中添加一个条目,包含您的应用程序的名称和其TestFlight或App Store页面的链接。

鸣谢

基于 MacEditorTextView 开发的 AppKit 文本编辑器代码,由 Thiago Holanda 提供。

Kyle Nazario 创建。