平时我们做即时通讯页面,往往会用到聊天室这个模块,但是往往会耗费很多的时间去搭建,这里给大家介绍一个聊天室控件 感觉还可以,基本的功能都可以实现,可以快速帮助我们开发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
网友评论