在集成环信即时通讯的基础上,要做好友推荐的功能,查了下SDK发现里面提供了自定义消息的接口,接下来我们就可以根据自己的需要去自定义消息视图了
- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id<IMessageModel>)messageModel{
环信的注释是: 获取消息自定义cell
用户根据messageModel判断是否显示自定义cell,返回nil显示默认cell,否则显示用户自定义cell
既然提供了方法,那么接下来我们就可以根据自己的需求去操作了(这里只做好友推荐的视图)
首先创建了继承EaseBaseMessageCell的自定义消息视图(有些博友问我后面不执行代理方法,在这里特此说明下,我是继承重写的,好多方法都是自己添加的,请留意你们的项目是直接修改还是继承)
.h
@interface IMChatBusinessCardCell : EaseBaseMessageCell
@end
.m
#import "IMChatBusinessCardCell.h"
#import "EaseBubbleView+IMChatBusinessCard.h"
static const CGFloat kCellHeight = 110.0f;
@implementation IMChatBusinessCardCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier model:(id<IMessageModel>)model{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier model:model];
if (self) {
self.hasRead.hidden = YES;
self.selectionStyle = UITableViewCellSelectionStyleNone;
}
return self;
}
- (BOOL)isCustomBubbleView:(id)model{
return YES;
}
- (void)setCustomModel:(id<IMessageModel>)model{
UIImage *image = model.image;
if (!image) {
[self.bubbleView.imageView sd_setImageWithURL:[NSURL URLWithString:model.fileURLPath] placeholderImage:[UIImage imageNamed:model.failImageName]];
} else {
_bubbleView.imageView.image = image;
}
if (model.avatarURLPath) {
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
} else {
self.avatarView.image = model.avatarImage;
}
}
- (void)setCustomBubbleView:(id)model{
[_bubbleView setupBusinessCardBubbleView];
_bubbleView.imageView.image = [UIImage imageNamed:@"shouyeliaotiankuangbai"];
}
- (void)updateCustomBubbleViewMargin:(UIEdgeInsets)bubbleMargin model:(id<IMessageModel>)mode{
[_bubbleView updateBusinessCardMargin:bubbleMargin];
_bubbleView.translatesAutoresizingMaskIntoConstraints = YES;
CGFloat bubbleViewHeight = 84;// 气泡背景图高度
CGFloat nameLabelHeight = 15;// 昵称label的高度
if (mode.isSender) {
_bubbleView.frame =
CGRectMake([UIScreen mainScreen].bounds.size.width - 273.5, nameLabelHeight, 213, bubbleViewHeight);
}else{
_bubbleView.frame = CGRectMake(55, nameLabelHeight, 213, bubbleViewHeight);
}
// 这里强制调用内部私有方法
[_bubbleView _setupConstraintsXX];
}
- (NSString *)cellIdentifierWithModel:(id<IMessageModel>)model{
return NSStringFromClass([self class]);
}
- (CGFloat)cellHeightWithModel:(id<IMessageModel>)model{
return kCellHeight;
}
- (void)setModel:(id<IMessageModel>)model{
[super setModel:model];
NSDictionary *dict = model.message.ext;
self.bubbleView.userNameLabel.text = dict[@"cardUserName"];
self.bubbleView.userPhoneLabel.text = dict[@"cardUserPhone"];
_hasRead.hidden = YES;//名片消息不显示已读
}
- (void)layoutSubviews
{
[super layoutSubviews];
NSString *imageName = self.model.isSender ? @"RedpacketCellResource.bundle/redpacket_sender_bg" : @"RedpacketCellResource.bundle/redpacket_receiver_bg";
UIImage *image = self