New file |
| | |
| | | /************************************************************ |
| | | * * 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+WebCache.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 |