| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- /************************************************************
- * * 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 "EaseUserCell.h"
- #import "EaseImageView.h"
- #import "UIImageView+EMWebCache.h"
- CGFloat const EaseUserCellPadding = 10;
- @interface EaseUserCell()
- @property (nonatomic) NSLayoutConstraint *titleWithAvatarLeftConstraint;
- @property (nonatomic) NSLayoutConstraint *titleWithoutAvatarLeftConstraint;
- @end
- @implementation EaseUserCell
- + (void)initialize
- {
- // UIAppearance Proxy Defaults
- /** @brief 默认配置 */
- EaseUserCell *cell = [self appearance];
- cell.titleLabelColor = [UIColor blackColor];
- cell.titleLabelFont = [UIFont systemFontOfSize:18];
- }
- - (instancetype)initWithStyle:(UITableViewCellStyle)style
- reuseIdentifier:(NSString *)reuseIdentifier
- {
- self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
- if (self) {
- self.accessibilityIdentifier = @"table_cell";
- [self _setupSubview];
-
- UILongPressGestureRecognizer *headerLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(headerLongPress:)];
- [self addGestureRecognizer:headerLongPress];
- }
-
- return self;
- }
- #pragma mark - private layout subviews
- /*!
- @method
- @brief 加载视图
- @discussion
- @return
- */
- - (void)_setupSubview
- {
- _avatarView = [[EaseImageView alloc] init];
- _avatarView.translatesAutoresizingMaskIntoConstraints = NO;
- [self.contentView addSubview:_avatarView];
-
- _titleLabel = [[UILabel alloc] init];
- _titleLabel.accessibilityIdentifier = @"title";
- _titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
- _titleLabel.numberOfLines = 2;
- _titleLabel.backgroundColor = [UIColor clearColor];
- _titleLabel.font = _titleLabelFont;
- _titleLabel.textColor = _titleLabelColor;
- [self.contentView addSubview:_titleLabel];
-
- [self _setupAvatarViewConstraints];
- [self _setupTitleLabelConstraints];
- }
- #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:EaseUserCellPadding]];
- [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-EaseUserCellPadding]];
- [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:EaseUserCellPadding]];
- [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 设置titleLabel的约束
- @discussion
- @return
- */
- - (void)_setupTitleLabelConstraints
- {
- [self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:EaseUserCellPadding]];
- [self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-EaseUserCellPadding]];
- [self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
- [self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-EaseUserCellPadding]];
-
- self.titleWithAvatarLeftConstraint = [NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeRight multiplier:1.0 constant:EaseUserCellPadding];
- self.titleWithoutAvatarLeftConstraint = [NSLayoutConstraint constraintWithItem:self.titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:EaseUserCellPadding];
- [self addConstraint:self.titleWithAvatarLeftConstraint];
- }
- #pragma mark - setter
- - (void)setShowAvatar:(BOOL)showAvatar
- {
- if (_showAvatar != showAvatar) {
- _showAvatar = showAvatar;
- self.avatarView.hidden = !showAvatar;
- if (_showAvatar) {
- [self removeConstraint:self.titleWithoutAvatarLeftConstraint];
- [self addConstraint:self.titleWithAvatarLeftConstraint];
- }
- else{
- [self removeConstraint:self.titleWithAvatarLeftConstraint];
- [self addConstraint:self.titleWithoutAvatarLeftConstraint];
- }
- }
- }
- - (void)setModel:(id<IUserModel>)model
- {
- _model = model;
-
- if ([_model.nickname length] > 0) {
- self.titleLabel.text = _model.nickname;
- }
- else{
- self.titleLabel.text = _model.buddy;
- }
-
- 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;
- }
- }
- }
- - (void)setTitleLabelFont:(UIFont *)titleLabelFont
- {
- _titleLabelFont = titleLabelFont;
- _titleLabel.font = _titleLabelFont;
- }
- - (void)setTitleLabelColor:(UIColor *)titleLabelColor
- {
- _titleLabelColor = titleLabelColor;
- _titleLabel.textColor = _titleLabelColor;
- }
- #pragma mark - class method
- /*!
- @method
- @brief 获取cell的重用标识
- @discussion
- @param model 消息model
- @return 返回cell的重用标识
- */
- + (NSString *)cellIdentifierWithModel:(id)model
- {
- return @"EaseUserCell";
- }
- /*!
- @method
- @brief 获取cell的高度
- @discussion
- @param model 消息model
- @return 返回cell的高度
- */
- + (CGFloat)cellHeightWithModel:(id)model
- {
- return EaseUserCellMinHeight;
- }
- #pragma mark - action
- /*!
- @method
- @brief 头像长按事件
- @discussion
- @param longPress 长按手势
- @return
- */
- - (void)headerLongPress:(UILongPressGestureRecognizer *)longPress
- {
- if (longPress.state == UIGestureRecognizerStateBegan) {
- if(_delegate && _indexPath && [_delegate respondsToSelector:@selector(cellLongPressAtIndexPath:)])
- {
- [_delegate cellLongPressAtIndexPath:self.indexPath];
- }
- }
- }
- - (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
|