注意:需要配置 URL Scheme,否则点击链接时将无法正确处理。在 iOS 应用中,必须先在项目的 Info.plist 文件中配置 URL Scheme,这样才能正确处理自定义 URL。
如何配置 URL Scheme:
- 打开你的 Xcode 项目,点击左侧导航栏的项目文件。
- 选择你的应用目标(Target)。
- 在上方选项卡中选择 "Info"。
- 展开 "URL Types",点击 "+" 来添加一个新的 URL Scheme。
- 在 "URL Schemes" 下添加你想要的 Scheme,比如
aaa.bbb.ccc。
配置完成后,你可以在代码中处理该 Scheme 的 URL,比如当用户点击 aaa.bbb.ccc://xxx 这样的 URL 时,系统会调用你应用中的 onOpenURL 方法。
完整代码示例(加入 URL Scheme):
import SwiftUI
// 工具类:处理富文本解析和点击事件
struct RichTextParser {
// 解析并返回带点击事件的富文本视图
static func parseText(text: String, clickableWords: [String], urlScheme: String) -> AttributedString {
var attributedString = AttributedString(text)
for word in clickableWords {
// 找到可点击的词语范围
if let range = attributedString.range(of: word) {
var linkText = AttributedString(attributedString[range])
linkText.foregroundColor = .blue // 自定义链接颜色
linkText.link = URL(string: "\(urlScheme)://\(word)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") // 生成对应的 URL,如果你需要在 URL 中传递中文或其他特殊字符,确保对它们进行适当的编码和解码。
// 替换原文本中的词语为带链接的文本
attributedString.replaceSubrange(range, with: linkText)
}
}
return attributedString
}
}
// SwiftUI 视图使用示例
struct ContentView: View {
@State private var selectedLink: String?
var body: some View {
VStack {
// 使用封装好的工具类解析文本
Text(RichTextParser.parseText(
text: "请点击这里或者SwiftUI和iOS", // 原始文本
clickableWords: ["SwiftUI", "iOS"], // 需要点击的词语
urlScheme: "aaa.bbb.ccc" // 自定义 URL Scheme
))
.lineLimit(nil) // 允许自动换行
.onOpenURL { url in
// 处理点击的 URL
if url.scheme == "aaa.bbb.ccc" {
print("点击了链接: \(url)")
selectedLink = url.absoluteString.removingPercentEncoding
} else {
print("未知的 URL Scheme: \(url.scheme ?? "nil")")
}
}
.padding()
if let link = selectedLink {
Text("点击了: \(link)")
.padding()
}
}
}
}
代码说明:
onOpenURL:- 使用
onOpenURL来处理点击事件。 - 检查
url.scheme是否与aaa.bbb.ccc相匹配,以确保只处理符合自定义 Scheme 的 URL。
- 使用
- 配置 URL Scheme:
- 将
aaa.bbb.ccc配置为自定义 URL Scheme,确保点击链接时不会报错,并且可以正确跳转或处理 URL。
- 将
总结:
通过在 Info.plist 中正确配置 URL Scheme,SwiftUI 应用可以识别和处理带有自定义 Scheme 的 URL 链接。这种方式能确保富文本中的点击链接在 iOS 上正确运行。