JSQMessagesViewController (一)

来源:互联网 发布:淘宝店关键词优化 编辑:程序博客网 时间:2024/06/06 07:07

集成JSQMessagesViewController


Demo下载

如果inputToolbar被键盘遮住了 看这里


第一步

导入JSQMessagesViewController
使用cocoapods导入 pod 'JSQMessagesViewController' (或者直接从Github下载)


第二步

包含头文件
由于本人用的是swift语言, 所以不能直接包含头文件, 因此创建一个桥接头文件, 这里命名为briding-Header.h在该头文件中需要包含JSQMessagesViewController头文件, 如下:
#import <JSQMessagesViewController/JSQMessages.h>
然后在 TARGETS -> Build Setting -> Objective-C Bridging Header中输入桥头文件的路径(该路径要和桥接头文件所在的目录一致), 如图:
image


第三步

一. 引入头文件(如果 import 没有提示或者报错, 参考这里)

import JSQMessagesViewController

二. 继承JSQMessagesViewController

import UIKitimport JSQMessagesViewControllerclass MessageViewController: JSQMessagesViewController {    /// 自己的气泡颜色    let outgoingBubble = JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImageWithColor(UIColor.jsq_messageBubbleGreenColor())    /// 别人的气泡颜色    let incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.jsq_messageBubbleBlueColor())    /// 数据源(消息)    var datasource: [JSQMessage] = []    override func viewDidLoad() {        super.viewDidLoad()        title = "与xxx聊天" //navigation标题        senderId = "111111" //发送人ID        senderDisplayName = "Chakery" //发送人名字        showLoadEarlierMessagesHeader = false //是否显示聊天记录(顶部的查看聊天记录) // 注意: // 如果重载了[Will/Did][Appear/Disappear]之类的方法 // 一定要调用父类的方法 super // 否则inputToolbar不能跟随键盘移动    override func viewDidAppear(animated: Bool) {        super.viewDidAppear(animated)        collectionView?.collectionViewLayout.springinessEnabled=true    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()    }}//MARK: inputToolbarextension MessageViewController {    //发送按钮    override func didPressSendButton(button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: NSDate!) {        JSQSystemSoundPlayer.jsq_playMessageSentSound()  //发送消息的声音        // 这里只是模拟消息, 仅供参考        let message: JSQMessage = JSQMessage(senderId: senderId, senderDisplayName: senderDisplayName, date: date, text: text)        let message2: JSQMessage = JSQMessage(senderId: "222222", senderDisplayName: "老王", date: date, text: "听不懂你说什么")        datasource.append(message)        datasource.append(message2)        self.finishSendingMessageAnimated(true)    }    //附件按钮    override func didPressAccessoryButton(sender: UIButton!) {        // do some...    }}//MARK: collectionView - delegate datasourceextension MessageViewController {    //消息    override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {        return self.datasource[indexPath.item]    }    //item数    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {        return self.datasource.count    }    //气泡颜色    override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {        if datasource[indexPath.item].senderId == senderId {            return outgoingBubble        }        return incomingBubble    }    //头像    override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {        let image = UIImage(named: "111") //图片        let diameter = UInt(collectionView.collectionViewLayout.outgoingAvatarViewSize.width) //直径        let avatarImage = JSQMessagesAvatarImageFactory.avatarImageWithImage(image, diameter: diameter)        return avatarImage    }    //cell    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {        let cell =  super.collectionView(collectionView, cellForItemAtIndexPath: indexPath) as! JSQMessagesCollectionViewCell        //如果不是媒体信息        if !datasource[indexPath.item].isMediaMessage {            //如果是本人发的消息            if datasource[indexPath.item].senderId == self.senderId {                cell.textView?.textColor = UIColor.whiteColor()            } else {                cell.textView?.textColor = UIColor.darkGrayColor()            }        }        return cell    }}

0 0