我正在尝试从NSMutableAttributedString中删除•项目符号。
我可以使用.replacingOccurrences(of:text,with:“”)删除文本“单击以打开图像...”,但是无论我做什么,要点都不会消失。无论如何,我认为这不是正确的解决方案。
我在标签的attributedText上调用以下扩展名 例如:
label.attributedText = someString.htmlAttributedString()
有什么建议吗?
extension String {
func htmlAttributedString() -> NSMutableAttributedString {
guard let data = self.data(using: String.Encoding.utf8, allowLossyConversion: false) else { return NSMutableAttributedString() }
guard let formattedString =
try? NSMutableAttributedString(
data: data,
options: [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)
else { return NSMutableAttributedString() }
let bulletPoint: String = "\u{2022}"
let attributedString = NSMutableAttributedString(string: bulletPoint)
formattedString.enumerateAttributes(in: NSRange(0..<attributedString.length), options: []) { (attributes, range, _) -> Void in
for (attribute, _) in attributes {
formattedString.removeAttribute(attribute, range: range)
}
}
formattedString.trimCharactersInSet(charSet: NSCharacterSet.whitespacesAndNewlines as NSCharacterSet)
return formattedString
}
}
html字符串看起来像这样:
{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x7fb06e91edb0> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 3, LineSpacing 0, ParagraphSpacing 12, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 15/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
} • {
NSColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
NSFont = "<UICTFont: 0x7fb06e93e600> font-family: \"TimesNewRomanPS-BoldMT\"; font-weight: bold; font-style: normal; font-size: 12.00pt";
NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 36, TailIndent 0, FirstLineHeadIndent 0, LineHeight 15/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 11L,\n 36N\n), DefaultTabInterval 36, Blocks (null), Lists (\n \"NSTextList 0x60c000442160 format <{disc}>\"\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
}Click to open image!{
NSColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
NSFont = "<UICTFont: 0x7fb06e93e600> font-family: \"TimesNewRomanPS-BoldMT\"; font-weight: bold; font-style: normal; font-size: 12.00pt";
NSKern = 0;
NSLink = "applewebdata://AC01F520-17C4-4F1A-BB81-0A54CBE9C2F6/images/galerie/fotoreportaj-faleza-inferioara-galati/01.jpg";
NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 36, TailIndent 0, FirstLineHeadIndent 0, LineHeight 15/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 11L,\n 36N\n), DefaultTabInterval 36, Blocks (null), Lists (\n \"NSTextList 0x60c000442160 format <{disc}>\"\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
NSStrokeWidth = 0;
NSUnderline = 1;
} Mareste imaginea {
NSColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
NSFont = "<UICTFont: 0x7fb06e91edb0> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
NSKern = 0;
NSLink = "applewebdata://AC01F520-17C4-4F1A-BB81-0A54CBE9C2F6/images/galerie/fotoreportaj-faleza-inferioara-galati/01.jpg";
NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 36, TailIndent 0, FirstLineHeadIndent 0, LineHeight 15/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 11L,\n 36N\n), DefaultTabInterval 36, Blocks (null), Lists (\n \"NSTextList 0x60c000442160 format <{disc}>\"\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
NSStrokeWidth = 0;
NSUnderline = 1;
}
这就是它的样子
.replacingOccurrences(of:“•”,带有:“”)
.replacingOccurrences(of:“单击以打开图像!”,带有:“”)
.replacingOccurrences(of:“ Maresteimagina”,带有:“”)
答案 0 :(得分:1)
在您当前的代码中,我完全不知道应该怎么做:
let bulletPoint: String = "\u{2022}"
let attributedString = NSMutableAttributedString(string: bulletPoint)
formattedString.enumerateAttributes(in: NSRange(0..<attributedString.length), options: []) { (attributes, range, _) -> Void in
for (attribute, _) in attributes {
formattedString.removeAttribute(attribute, range: range)
}
}
如果NSRange(0..<attributedString.length)
短于formattedString
,则使用attributedString
的事实会导致崩溃。这是一个要点,因此您不应该遇到问题,但是仍然要解决。
而其背后的目标却无法实现。
项目符号•
或\u{2022}
是在解析后创建的,因此您需要解析formattedString.string
,您可以做什么:
let regex = try! NSRegularExpression(pattern: "\\s\u{2022}\\s", options: [])
let matches = regex.matches(in: formattedString.string, options: [], range: NSMakeRange(0, formattedString.string.utf16.count))
matches.reversed().forEach { formattedString.replaceCharacters(in: $0.range, with: "")}
我不知道您是否只想删除项目符号或文本的其余部分(其他人是否尝试使用.replacingOccurrences(of: "Click to open image!", with: "")
只是为了确保您确实能够到达该行并删除子字符串,或者不是。