ios - SwiftUI 中带有丰富 markdown 的文本视图(不仅仅是粗体和斜体文本)
问题描述
安卓
在我的应用程序中,我需要在视觉上设置样式并突出显示来自数据库的长文本。正文如下:
接受<f>当前</f>的情况,<f>然后</f>尝试在此基础上建立一个更好的情况。只有这样,你才能从所有的逃避中得到休息,并能够思考如何真正改进。
<h>抗拒加深消极思想,接受释放消极思想。</h>
在 Android 上,我获取这些文本并使用正则表达式对其进行解析,以将标签替换为适用于库的内容。我正在使用SRML库来显示它,如下所示:
iOS
现在我的问题是:如何在 iOS 上获得类似的体验?
到目前为止,我正在使用 SwiftUI,但我可以看到它在这方面非常有限。到目前为止,我发现的所有库都可以帮助您使其粗体、斜体或其他非常小的东西:
但我特别需要突出显示短语,这意味着将它们的背景涂成黄色。然后我找到了这个库,它提供了一些非常复杂的功能,但是是用 Objective-C 编写的,我不知道它在我的 SwiftUI 基础上的效果如何:https ://github.com/ibireme/YYText
我有机会让它与 SwiftUI 组件一起使用吗?
我最好的猜测是做这样的事情(非常基本的伪代码):
text = DB.getText
parser = StringParser(text)
content = ViewGroup()
while(parser.hasNextLine) { nextLine in
if(nextLine.contains("<h>")) {
var text = Text(nextLine)
.background(Color.yellow)
content.add(text)
} else if(...) {
...
}
// etc. etc.
}
Text
并从多个部分逐步构建结果。但老实说,这看起来有点丑陋。还有其他想法吗?如果没有,我应该如何将 Cbjective-C 库包含到 SwiftUI 项目中?
解决方案
在 Fiverr 上的自由职业者的帮助下,我通过以下方式解决了这个问题:
https://stackoverflow.com/a/69871902/1972372
Texts
基本上手动解析标签并跟踪数组中的内容类型和顺序,同时在另一个数组中保持格式化。然后我可以把这些内容植入到ViewBuilder
身体功能中。
不幸的是,SwiftUI 还不允许您更改 aText
的背景颜色,而无需将其转换为some View
. 所以我现在不得不使用其他类似的格式。
推荐阅读
- sql-server - 如何在 SQL Server 中使用多个更新查询
- python - 当菜单使用输入时从下拉菜单中选择一个项目,而不是选择
- php - 使用foreach拆分字符串?
- c# - Canvas 与 Box Colliders 混淆
- javascript - 创建一个不可关闭的非覆盖模式,用户仍然可以在后台导航
- python - 提取文本文件中的部分电子邮件
- arrays - 使用具有通用等级的 ND 插值?
- java - 使用 Java unsafe 将 char 数组指向内存位置
- c# - 在 C# 中“就地”修改数组?
- angular - “组件”不是 Angular 6 中的已知元素