iOS swift 实现图文混排 emoji小表情和文字都显示在一个textview中

这篇博客介绍了如何在iOS应用中使用Swift实现图文混排,并且详细讲解了如何将emoji表情和文字结合,通过替换特定格式的字符串并设置attributedText到textview来展示。
//使用string 创建 NSMutableString
        var msgtext : NSMutableString = NSMutableString(string: msg.text)
        var range :NSRange = NSRange()
        var emoji : String = ""
        var locationlist : NSMutableArray = NSMutableArray()
        var location : NSDictionary = NSDictionary()
        //获取表情的位置信息和表情的具体信息带[emoji_ 及其后3位
        while msgtext.rangeOfString("[emoji_").location != NSNotFound {
            range =  msgtext.rangeOfString("[emoji_")
            if msgtext.length > (range.location  + range.length + 2){
            range = NSRange(location: range.location,length: range.length+3)
            emoji = msgtext.substringWithRange(range)
            //str.replaceCharactersInRange(aaa, withString: "")
            msgtext.replaceCharactersInRange(range, withString: "")
            location = ["loc" : range , "emoji" : emoji]
            locationlist.addObject(location)
            }else{
                break
            }
        }
        var string:NSMutableAttributedString = NSMutableAttributedString(string: msgtext as String, attributes: nil)
        
        //从后面向前依次替换表情,(从前向后的时候位置信息出现错误),10以内的补0
        for local in locationlist.reverseObjectEnumerator(){
            
            var emojilist:[String] = (local["emoji"] as! String).componentsSeparatedByString("_")
            
            let emojinum = emojilist[1]._bridgeToObjectiveC().integerValue
            println(emojinum)
            var range :NSRange = local["loc"] as! NSRange
            if  emojinum >= 10{
                var textAttachment:NSTextAttachment = NSTextAttachment(data: nil, ofType: nil)
                var smileImage:UIImage = UIImage(named: "xiaoming")!
                var picname : String = "emoji_\(emojinum)"
                smileImage = UIImage(named: picname)!
                textAttachment.image = smileImage
                var textAttachmentString:NSAttributedString  = NSAttributedString(attachment: textAttachment)
                //var range :NSRange = local["loc"] as! NSRange
                string.insertAttributedString(textAttachmentString, atIndex: range.location)
            }else if emojinum > 0{
                var textAttachment:NSTextAttachment = NSTextAttachment(data: nil, ofType: nil)
                var smileImage:UIImage = UIImage(named: "xiaoming")!
                var picname : String = "emoji_0\(emojinum)"
                smileImage = UIImage(named: picname)!
                textAttachment.image = smileImage
                var textAttachmentString:NSAttributedString  = NSAttributedString(attachment: textAttachment)
                
                string.insertAttributedString(textAttachmentString, atIndex: range.location)
            }else{
                var textAttachmentString:NSAttributedString  = NSAttributedString(string: local["emoji"] as! String)
                string.insertAttributedString(textAttachmentString, atIndex: range.location)
            }
        }

可以替换的表情格式为[emoji_01],,这样的。

最后使用

messageContentView.attributedText = string

将string放入一个textview中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值