| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- /************************************************************
- * * 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+EMWebCache.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
|