/************************************************************
|
* * Hyphenate CONFIDENTIAL
|
* __________________
|
* Copyright (C) 2016 Hyphenate Inc. All rights reserved.
|
*
|
* NOTICE: All information contained herein is, and remains
|
* the property of Hyphenate Inc.
|
* Dissemination of this information or reproduction of this material
|
* is strictly forbidden unless prior written permission is obtained
|
* from Hyphenate Inc.
|
*/
|
|
#import "EaseConversationCell.h"
|
|
#if ENABLE_LITE == 1
|
#import <HyphenateLite/EMConversation.h>
|
#else
|
#import <Hyphenate/EMConversation.h>
|
#endif
|
#import "UIImageView+WebCache.h"
|
|
CGFloat const EaseConversationCellPadding = 10;
|
|
@interface EaseConversationCell()
|
|
@property (nonatomic) NSLayoutConstraint *titleWithAvatarLeftConstraint;
|
|
@property (nonatomic) NSLayoutConstraint *titleWithoutAvatarLeftConstraint;
|
|
@property (nonatomic) NSLayoutConstraint *detailWithAvatarLeftConstraint;
|
|
@property (nonatomic) NSLayoutConstraint *detailWithoutAvatarLeftConstraint;
|
|
@end
|
|
@implementation EaseConversationCell
|
|
+ (void)initialize
|
{
|
// UIAppearance Proxy Defaults
|
/** @brief 默认配置 */
|
EaseConversationCell *cell = [self appearance];
|
cell.titleLabelColor = [UIColor blackColor];
|
cell.titleLabelFont = [UIFont systemFontOfSize:17];
|
cell.detailLabelColor = [UIColor lightGrayColor];
|
cell.detailLabelFont = [UIFont systemFontOfSize:15];
|
cell.timeLabelColor = [UIColor blackColor];
|
cell.timeLabelFont = [UIFont systemFontOfSize:13];
|
}
|
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style
|
reuseIdentifier:(NSString *)reuseIdentifier
|
{
|
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
|
if (self) {
|
_showAvatar = YES;
|
[self _setupSubview];
|
}
|
|
return self;
|
}
|
|
#pragma mark - private layout subviews
|
|
/*!
|
@method
|
@brief 加载视图
|
@discussion
|
@return
|
*/
|
- (void)_setupSubview
|
{
|
self.accessibilityIdentifier = @"table_cell";
|
|
_avatarView = [[EaseImageView alloc] init];
|
_avatarView.translatesAutoresizingMaskIntoConstraints = NO;
|
[self.contentView addSubview:_avatarView];
|
|
_timeLabel = [[UILabel alloc] init];
|
_timeLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
_timeLabel.font = _timeLabelFont;
|
_timeLabel.textColor = _timeLabelColor;
|
_timeLabel.textAlignment = NSTextAlignmentRight;
|
_timeLabel.backgroundColor = [UIColor clearColor];
|
[self.contentView addSubview:_timeLabel];
|
|
_titleLabel = [[UILabel alloc] init];
|
_titleLabel.accessibilityIdentifier = @"title";
|
_titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
_titleLabel.numberOfLines = 1;
|
_titleLabel.backgroundColor = [UIColor clearColor];
|
_titleLabel.font = _titleLabelFont;
|
_titleLabel.textColor = _titleLabelColor;
|
[self.contentView addSubview:_titleLabel];
|
|
_detailLabel = [[UILabel alloc] init];
|
_detailLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
_detailLabel.backgroundColor = [UIColor clearColor];
|
_detailLabel.font = _detailLabelFont;
|
_detailLabel.textColor = _detailLabelColor;
|
[self.contentView addSubview:_detailLabel];
|
|
[self _setupAvatarViewConstraints];
|
[self _setupTimeLabelConstraints];
|
[self _setupTitleLabelConstraints];
|
[self _setupDetailLabelConstraints];
|
}
|
|
#pragma mark - Setup Constraints
|
|
/*!
|
@method
|
@brief 设置avatarView的约束
|
@discussion
|
@return
|
*/
|
- (void)_setupAvatarViewConstraints
|
{
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]];
|
}
|
|
/*!
|
@method
|
@brief 设置timeLabel的约束
|
@discussion
|
@return
|
*/
|
- (void)_setupTimeLabelConstraints
|
{
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.timeLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.timeLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-EaseConversationCellPadding]];
|
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.timeLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeHeight multiplier:0.5 constant:0]];
|
}
|
|
/*!
|
@method
|
@brief 设置titleLabel的约束
|
@discussion
|
@return
|
*/
|
- (void)_setupTitleLabelConstraints
|
{
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeHeight multiplier:0.5 constant:-EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.timeLabel attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-EaseConversationCellPadding]];
|
|
self.titleWithAvatarLeftConstraint = [NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeRight multiplier:1.0 constant:EaseConversationCellPadding];
|
self.titleWithoutAvatarLeftConstraint = [NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:EaseConversationCellPadding];
|
[self addConstraint:self.titleWithAvatarLeftConstraint];
|
}
|
|
/*!
|
@method
|
@brief 设置detailLabel的约束
|
@discussion
|
@return
|
*/
|
- (void)_setupDetailLabelConstraints
|
{
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.detailLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.titleLabel attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.detailLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-EaseConversationCellPadding]];
|
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.detailLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-EaseConversationCellPadding]];
|
|
self.detailWithAvatarLeftConstraint = [NSLayoutConstraint constraintWithItem:self.detailLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeRight multiplier:1.0 constant:EaseConversationCellPadding];
|
self.detailWithoutAvatarLeftConstraint = [NSLayoutConstraint constraintWithItem:self.detailLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:EaseConversationCellPadding];
|
[self addConstraint:self.detailWithAvatarLeftConstraint];
|
}
|
|
#pragma mark - setter
|
|
- (void)setShowAvatar:(BOOL)showAvatar
|
{
|
if (_showAvatar != showAvatar) {
|
_showAvatar = showAvatar;
|
self.avatarView.hidden = !showAvatar;
|
if (_showAvatar) {
|
[self removeConstraint:self.titleWithoutAvatarLeftConstraint];
|
[self removeConstraint:self.detailWithoutAvatarLeftConstraint];
|
[self addConstraint:self.titleWithAvatarLeftConstraint];
|
[self addConstraint:self.detailWithAvatarLeftConstraint];
|
}
|
else{
|
[self removeConstraint:self.titleWithAvatarLeftConstraint];
|
[self removeConstraint:self.detailWithAvatarLeftConstraint];
|
[self addConstraint:self.titleWithoutAvatarLeftConstraint];
|
[self addConstraint:self.detailWithoutAvatarLeftConstraint];
|
}
|
}
|
}
|
|
- (void)setModel:(id<IConversationModel>)model
|
{
|
_model = model;
|
|
if ([_model.title length] > 0) {
|
self.titleLabel.text = _model.title;
|
}
|
else{
|
self.titleLabel.text = _model.conversation.conversationId;
|
}
|
|
if (self.showAvatar) {
|
if ([_model.avatarURLPath length] > 0){
|
[self.avatarView.imageView sd_setImageWithURL:[NSURL URLWithString:_model.avatarURLPath] placeholderImage:_model.avatarImage];
|
} else {
|
if (_model.avatarImage) {
|
self.avatarView.image = _model.avatarImage;
|
}
|
}
|
}
|
|
if (_model.conversation.unreadMessagesCount == 0) {
|
_avatarView.showBadge = NO;
|
}
|
else{
|
_avatarView.showBadge = YES;
|
_avatarView.badge = _model.conversation.unreadMessagesCount;
|
}
|
}
|
|
- (void)setTitleLabelFont:(UIFont *)titleLabelFont
|
{
|
_titleLabelFont = titleLabelFont;
|
_titleLabel.font = _titleLabelFont;
|
}
|
|
- (void)setTitleLabelColor:(UIColor *)titleLabelColor
|
{
|
_titleLabelColor = titleLabelColor;
|
_titleLabel.textColor = _titleLabelColor;
|
}
|
|
- (void)setDetailLabelFont:(UIFont *)detailLabelFont
|
{
|
_detailLabelFont = detailLabelFont;
|
_detailLabel.font = _detailLabelFont;
|
}
|
|
- (void)setDetailLabelColor:(UIColor *)detailLabelColor
|
{
|
_detailLabelColor = detailLabelColor;
|
_detailLabel.textColor = _detailLabelColor;
|
}
|
|
- (void)setTimeLabelFont:(UIFont *)timeLabelFont
|
{
|
_timeLabelFont = timeLabelFont;
|
_timeLabel.font = _timeLabelFont;
|
}
|
|
- (void)setTimeLabelColor:(UIColor *)timeLabelColor
|
{
|
_timeLabelColor = timeLabelColor;
|
_timeLabel.textColor = _timeLabelColor;
|
}
|
|
#pragma mark - class method
|
|
/*!
|
@method
|
@brief 获取cell的重用标识
|
@discussion
|
@param model 消息model
|
@return 返回cell的重用标识
|
*/
|
+ (NSString *)cellIdentifierWithModel:(id)model
|
{
|
return @"EaseConversationCell";
|
}
|
|
/*!
|
@method
|
@brief 获取cell的高度
|
@discussion
|
@param model 消息model
|
@return 返回cell的高度
|
*/
|
+ (CGFloat)cellHeightWithModel:(id)model
|
{
|
return EaseConversationCellMinHeight;
|
}
|
|
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
|
{
|
[super setSelected:selected animated:animated];
|
if (_avatarView.badge) {
|
_avatarView.badgeBackgroudColor = [UIColor redColor];
|
}
|
}
|
|
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
|
[super setHighlighted:highlighted animated:animated];
|
if (_avatarView.badge) {
|
_avatarView.badgeBackgroudColor = [UIColor redColor];
|
}
|
}
|
|
@end
|