从HTML中创建带有块引用的NSAttributedString

5

我有一些简单的HTML代码,其中包含一个blockquote标签,我想在UITableViewCell中的一个UILabel中展示它,所以我认为使用UIWebView不是解决我的问题的方法。

我决定将其转换为NSAttributedString,所有内容都正常工作,但我收到的引用文本与未引用文本完全相同(没有缩进,没有块标记)。

我想询问是否有任何方法可以实现类似于这里提到的现代引用,或者至少使用NSAttributedString在引用段落的每一行前进行一些缩进和前缀(例如旧式电子邮件引用中的>)?


似乎不行:https://dev59.com/E3_aa4cB1Zd3GeqP00be,而这个GitHub库似乎可以实现:https://github.com/johnezang/NSAttributedString-Additions-for-HTML/blob/master/Classes/NSAttributedString%2BHTML.m - Larme
当然,我已经看到了关于堆栈的话题,但我希望自那篇文章发布以来有些变化,也许会有人回答我的问题。我会测试第二个链接,但如果它与DTCoreText中使用的相同,则不起作用。 - co-
我也遇到了同样的问题。你是如何解决它的? - aqsa arshad
嗨@aqsaarshad 说实话,我写了一些代码,它只是在整个字符串中搜索开放和关闭的“blockquote”标记(使用普通文本搜索)。然后它会删除某个嵌套级别的嵌套块引用。之后,它会生成NSAttributedString,其中包含普通文本和引用文本的不同属性。 我可以与您分享代码,但由于它已经有3年历史,没有注释,效率低下且非常混乱,我认为编写自己的代码比复制我的解决方案更好。 - co-
@co-,感谢您的帮助。我现在也添加了一个修补解决方案。我在HTML上添加了一个样式标签,用于为HTML字符串中的所有“blockquote”标签添加“间距、边距和背景颜色”,因此我将得到包含样式标签中提到的所有样式的结果属性字符串。 - aqsa arshad
1个回答

0

我知道你是在问Obj-C相关的问题,但我刚刚浏览了一下发现这个问题已经三年没有答案了。而且我之前在其他地方已经解决过类似的问题,所以我想分享一下我的经验。

let parsedCommentHTML = html.replacingOccurrences(of: "<blockquote>\n", with: "<blockquote>\n<k style=\"color:#ccc; font-size: 2em; font-family: 'Copperplate'\"></k>")
let blockQuoteCSS = "\nblockquote > p {color:#808080; display: inline;} \n blockquote { background: #f9f9f9;}"
let pCSS = "p {margin-bottom: 0px;}"
let cssStyle = "\(blockQuoteCSS)\n\(pCSS)\n"

return try NSAttributedString(data: ("<html><head><style>\(cssStyle)</style></head><span style=\"font-family: HelveticaNeue-Thin; font-size: 17\">\(parsedCommentHTML)</span></html>").data(using: String.Encoding.unicode)!, options: [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType], documentAttributes: nil)

这将产生一个我认为很好看的引用: 输入图像描述

我真的很想把这段代码作为指南,但我从未编写过Swift代码,因此无法将其转换为Objective-C。如果有人能帮忙转换一下就太好了。 - jane
其实关键部分是 CSS。把它当作伪代码阅读即可。你需要知道的唯一语法就是在 Swift 中,你可以使用 "string string \(variable)" 来将变量插入到字符串中。 - Allison
我可以读取let部分,但是这个返回值try NSAttributedString(data: ("<html><head><style>(cssStyle)</style></head><span style="font-family: HelveticaNeue-Thin; font-size: 17">(parsedCommentHTML)</span></html>").data(using: String.Encoding.unicode)!, options: [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType], documentAttributes: nil)让我感到困惑。 - jane
如果你知道你在找什么(你可能不知道,这很公平),那么很容易找到:https://dev59.com/6m855IYBdhLWcg3wp2J0#18886718 - Allison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接