NSMutableAttributedString 使用

总结下,这几天对NSMutableAttributedString的使用java

import UIKit
import Foundation


func getFaceIcon(str:String) -> UIImage? {
    if str == "aa" || str == "cc"{
        return UIImage()
    }else{
        return nil
    }
}

func strToNSAttributeStr(contentstr:String , muattstr:NSMutableAttributedString) -> NSMutableAttributedString {
    // 填充真实内容
    let attstr = NSAttributedString(string: contentstr)
    muattstr.appendAttributedString(attstr)
    return muattstr
}

func textAndFaceImage(contentstr:String , muattstr:NSMutableAttributedString = NSMutableAttributedString() ) -> NSMutableAttributedString {
    //查找表情开始的地方
    if let startr = contentstr.rangeOfString("[") {
        // 截取表情
        let startstr = contentstr.substringFromIndex(startr.endIndex)
        //查找表情结束的地方
        if let endr = startstr.rangeOfString("]") {
            //截取到表情
            let endstr = startstr.substringToIndex(endr.startIndex)
            
            //得到真实的表情image
            if let faceimg:UIImage = getFaceIcon(endstr) {
                //表情 及 相关设置
                let attach:NSTextAttachment = NSTextAttachment()
                attach.image = faceimg
                let labheight:CGFloat = 30 //lab.font.lineHeight
                attach.bounds = CGRectMake(0, -5, labheight, labheight)
                let faceattstr:NSAttributedString = NSAttributedString(attachment: attach)
                
                // 填充表情前的内容
                let contentstrstart = contentstr.substringToIndex(startr.startIndex)
                muattstr.appendAttributedString(NSAttributedString(string: contentstrstart))
                
                // 填充表情
                muattstr.appendAttributedString(faceattstr)
                
                //表情后的内容
                let contentstrend = startstr.substringFromIndex(endr.endIndex)
                
                // 若是还有其余表情,继续替换,没有则结束
                if let _ = contentstrend.rangeOfString("[") {
                    return textAndFaceImage(contentstrend, muattstr: muattstr)
                }else{
                    // 填充表情后的内容
                    muattstr.appendAttributedString(NSAttributedString(string: contentstrend))
                    return muattstr
                }
            }else{
                // 填充表情前的内容
                let otherstrstart = contentstr.substringToIndex(startr.endIndex)
                muattstr.appendAttributedString(NSAttributedString(string: otherstrstart))
                //继续检索表情
                return textAndFaceImage(startstr, muattstr: muattstr)
            }
        }
    }
    return strToNSAttributeStr(contentstr, muattstr: muattstr)
}


// 原内容
let contentstr:String = "111[222[aa]3333]444[bb]5555[cc]666[777[aa]888]999"
// 真实内容
let muattstr:NSMutableAttributedString = textAndFaceImage(contentstr)

// 使用
lab.attributedText = muattstr
let labsize = lab.sizeThatFits(CGSizeMake(contentwidth, CGFloat.max))
相关文章
相关标签/搜索