IOS JSQMessagesViewController

2020-08-08  本文已影响0人  越天高

平时我们做即时通讯页面,往往会用到聊天室这个模块,但是往往会耗费很多的时间去搭建,这里给大家介绍一个聊天室控件 感觉还可以,基本的功能都可以实现,可以快速帮助我们开发APP
集成的话可以直接到github上看下载https://github.com/jessesquires/JSQMessagesViewController也可以用cocoapods直接集成
pod 'JSQMessagesViewController'

使用的话我们直接创建一个控制器,继承于JSQMessagesViewController

//接下来就是实现它的代理方法,就可以快速使用了

//.h
#import <JSQMessagesViewController/JSQMessagesViewController.h>

NS_ASSUME_NONNULL_BEGIN
@class UserItem;

@interface ChatVC : JSQMessagesViewController
@property (nonatomic, strong) UserItem *user;


@end

NS_ASSUME_NONNULL_END


.m

#import "ChatVC.h"
#import "JSQMessages.h"
#import "UserItem.h"

@interface ChatVC ()
@property (nonatomic, strong) NSMutableArray *messages;
@property (nonatomic, strong) JSQMessagesBubbleImage *myBubble;
@property (nonatomic, strong) JSQMessagesBubbleImage *otherBubble;




@end

@implementation ChatVC
- (NSMutableArray *)messages
{
   if (_messages == nil)
   {
       _messages = [NSMutableArray array];
       UserItem *user02 = [UserItem userWithName:@"Client02"];
       UserItem *user03 = [UserItem userWithName:@"Client03"];
       UserItem *user04 = [UserItem userWithName:@"Client04"];
       JSQMessage *msg02 = [[JSQMessage alloc] initWithSenderId:user02.userID senderDisplayName:user02.userName date:[NSDate date] text:@"我是客户端02"];
       JSQMessage *msg03 = [[JSQMessage alloc] initWithSenderId:user02.userID senderDisplayName:user03.userName date:[NSDate date] text:@"我是客户端03"];
       JSQMessage *msg04 = [[JSQMessage alloc] initWithSenderId:user02.userID senderDisplayName:user04.userName date:[NSDate date] text:@"我是客户端04"];
       [_messages addObject:msg02];
       [_messages addObject:msg03];
       [_messages addObject:msg04];
       
           
   }
   return _messages;
}

- (void)viewDidLoad
{
   [super viewDidLoad];
   [self createBuble];
}
//穿件不同气泡
- (void)createBuble
{
   JSQMessagesBubbleImageFactory *factory = [[JSQMessagesBubbleImageFactory alloc] init];
   _myBubble = [factory outgoingMessagesBubbleImageWithColor:[UIColor blueColor]];
   _otherBubble = [factory incomingMessagesBubbleImageWithColor:[UIColor greenColor]];
   
}

#pragma mark - 发送消息-
//点击消息发送按钮
- (void)didPressSendButton:(UIButton *)button withMessageText:(NSString *)text senderId:(NSString *)senderId senderDisplayName:(NSString *)senderDisplayName date:(NSDate *)date
{
   JSQMessage *msg = [[JSQMessage alloc] initWithSenderId:self.user.userID senderDisplayName:self.user.userName date:[NSDate date] text:text];
   [self.messages addObject:msg];
   [self.collectionView reloadData];
   //发送到服务器
}
//点击左边附件按钮
- (void)didPressAccessoryButton:(UIButton *)sender
{
   //添加附件
}
#pragma mark - JSQMessagesCollectionViewDataSource -


//当前用户的用化名
- (NSString *)senderDisplayName
{
   return self.user.userName;
}

//当前用户的ID
- (NSString *)senderId
{
   return self.user.userID;
}



#pragma mark - UICollectionViewDataSource

//创建多少行cell
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
   return self.messages.count;
}

//如果需要自定一cell的话要重写他的返回Cell的方法


#pragma mark - ChatViewControllerDatasource-
//返回每一行展示的消息
- (id<JSQMessageData>)collectionView:(JSQMessagesCollectionView *)collectionView messageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
   //每一行的消息
   JSQMessage *message = self.messages[indexPath.row];
   
   return message;
}


- (void)collectionView:(JSQMessagesCollectionView *)collectionView didDeleteMessageAtIndexPath:(NSIndexPath *)indexPath
{
   //执行删除操作
}

//返回聊天气泡,就是消息的背景
- (id<JSQMessageBubbleImageDataSource>)collectionView:(JSQMessagesCollectionView *)collectionView messageBubbleImageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
   JSQMessage *msg = self.messages[indexPath.row];
   if ([msg.senderDisplayName isEqualToString: self.user.userName])
   {
       return self.myBubble;
   }
   return self.otherBubble;
   
}

//返回用户头像
- (id<JSQMessageAvatarImageDataSource>)collectionView:(JSQMessagesCollectionView *)collectionView avatarImageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
   
   
   JSQMessagesAvatarImage *avatarImage = [[JSQMessagesAvatarImage alloc ] initWithAvatarImage:[UIImage imageNamed:@"sll108"] highlightedImage:[UIImage imageNamed:@"sll108"] placeholderImage:[UIImage imageNamed:@"sll108"]];
   return avatarImage;
   
}
@end
上一篇 下一篇

猜你喜欢

热点阅读