如何将特定字符串替换为NSTextAttachment以显示图像

时间:2017-02-02 03:47:39

标签: ios swift

我会收到很多消息字符串

喜欢这些:

1.hello {{http://i.imgur.com/f1cqT3ut.jpg}} world {{http://i.imgur.com/f1cqT3ut.jpg}}

2.hi {{http://i.imgur.com/iVx9iqjt.jpg}} {{http://i.imgur.com/iVx9iqjt.jpg}} how {{http://i.imgur.com/ZpXgxiXt.jpg}} are {{http://i.imgur.com/rcdHObKt.jpg}} you {{http://i.imgur.com/yX5dHdet.jpg}} ? {{http://i.imgur.com/2iZSBKGt.jpg}}

我想处理这些消息

喜欢这些:

1。message handled 1

2。message handled 2

现在我只知道可以使用NSMutableAttributedString来显示所有已处理的消息,并使用NSTextAttachment来显示url图像。

但我不知道如何更换和处理这些讯息。

请帮帮我。

感谢。

2 个答案:

答案 0 :(得分:0)

如果你可以假设每个字符串都是这样设置的,那么单词和URL用空格分隔 - 并且URL都包含在两组花括号中,你可以创建一个方法然后取一个字符串并将其拆分为子串数组(以空格分隔),然后您可以检查以“{{”开头的子字符串,以了解它是一个URL。我刚刚写了这样的东西,它将返回一个元组数组,其中每个元组是一个整数(与子字符串数组中的URL的索引相关),以及一个表示从大括号中删除的URL的字符串。

func split(_ s: String) -> [(Int, String)] {

    // Separate the original string into an array of substrings separated by a space
    let separated = s.components(separatedBy: " ")
    // Filter the separated array to find the URLs that start with {{
    var urls = separated.filter{ $0.hasPrefix("{{") }
    // Map the urls array to get an array of ints correlating to their respective indices from the separated array
    let indicies = urls.map { separated.index(of: $0) }
    // create an empty array of Int and String tuples
    var tuples: [(Int, String)] = []

    // Loop through the url array 
    for i in 0 ..< urls .count {

        // Remove the left side (open) curly brackets
        urls[i] = urls[i].replacingOccurrences(of: "{{", with: "")
        // Remove the right side (close) curly brackets
        urls[i] = urls[i].replacingOccurrences(of: "}}", with: "")

        // Append the tuple with the url's index from the separated array and it's actual url value as a string
        tuples.append((indicies[i]!, urls [i]))
    }
    return tuples
}

然后你可以使用它来分割网址中的单词,然后获取图像(这取决于你 - 可能使用Alamofire甚至只是NSURLSession)然后因为你有他们的原始索引子串的数组 - 你仍然知道他们进入的顺序。所以一旦异步请求返回,就根据原始顺序重新排列它们,然后使用夹在UILabels之间的UIImageViews(或者反之亦然)以你正在尝试的方式显示内容。

答案 1 :(得分:0)

        let fullString = NSMutableAttributedString(string : "start of text")
    let image1Attachment = NSTextAttachment()
    image1Attachment.image = UIImage(named : "image name")
    let image1String = NSAttributedString(attachment: image1Attachment)

    fullString.append(image1String)
    fullString.append(NSAttributedString(string: "End of text"))

    yourLabel.attributedText = fullString

此代码用于显示您想要的方式。根据需要使用参考工具代码。