代码之家  ›  专栏  ›  技术社区  ›  r3dm4n santosh kumar behera

从nsmutableattributedstring中删除项目符号

  •  0
  • r3dm4n santosh kumar behera  · 技术社区  · 6 年前

    我正试图从nsmutableattributedstring中删除–bulletpoints。

    我可以用.replacingoccurrences(of:text,with:“)删除“单击打开图像…”文本,但无论我做什么,项目符号都不会消失。我不认为这是正确的解决办法。

    我正在一个标签的attributeText上调用下面的扩展名 前任:

    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
        }
    }
    

    enter image description here

    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(共个:“,共个:”)

    .replacingoccurrences(属于:“单击打开图像!”,带有:“)

    .重发(指:“Mareste Imaginea”,带:“)

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   Larme    6 年前

    在你现在的代码中,我完全不知道该怎么做:

    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: "") 只是想看看你是否真的能够到达那一行并移除子字符串。