// // KBAICommentHeaderView.m // keyBoard // // Created by Mac on 2026/1/16. // #import "KBAICommentHeaderView.h" #import "KBAICommentModel.h" #import "KBTopImageButton.h" #import #import @interface KBAICommentHeaderView () @property(nonatomic, strong) UIImageView *avatarImageView; @property(nonatomic, strong) UILabel *userNameLabel; @property(nonatomic, strong) UILabel *contentLabel; @property(nonatomic, strong) UILabel *timeLabel; @property(nonatomic, strong) UIButton *replyButton; @property(nonatomic, strong) KBTopImageButton *likeButton; @end @implementation KBAICommentHeaderView - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithReuseIdentifier:reuseIdentifier]; if (self) { [self setupUI]; } return self; } #pragma mark - UI Setup - (void)setupUI { self.contentView.backgroundColor = [UIColor clearColor]; [self.contentView addSubview:self.avatarImageView]; [self.contentView addSubview:self.userNameLabel]; [self.contentView addSubview:self.contentLabel]; [self.contentView addSubview:self.timeLabel]; [self.contentView addSubview:self.replyButton]; [self.contentView addSubview:self.likeButton]; [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.contentView).offset(16); make.top.equalTo(self.contentView).offset(12); make.width.height.mas_equalTo(28); }]; [self.userNameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.avatarImageView.mas_right).offset(12); make.top.equalTo(self.avatarImageView); make.right.lessThanOrEqualTo(self.likeButton.mas_left).offset(-10); }]; [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userNameLabel); make.top.equalTo(self.contentLabel.mas_bottom).offset(8); make.bottom.equalTo(self.contentView).offset(-12).priority(MASLayoutPriorityDefaultHigh); }]; [self.replyButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.timeLabel.mas_right).offset(16); make.centerY.equalTo(self.timeLabel); }]; [self.likeButton mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.contentView).offset(-16); make.top.equalTo(self.contentView).offset(12); make.width.mas_equalTo(30); make.height.mas_equalTo(40); }]; [self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userNameLabel); make.top.equalTo(self.userNameLabel.mas_bottom).offset(6); make.right.equalTo(self.likeButton.mas_left).offset(-5); }]; } #pragma mark - Configuration - (void)configureWithComment:(KBAICommentModel *)comment { [self.avatarImageView sd_setImageWithURL:[NSURL URLWithString:comment.avatarUrl] placeholderImage:[UIImage imageNamed:@"default_avatar"]]; self.userNameLabel.text = comment.userName; self.contentLabel.text = comment.content; self.timeLabel.text = [comment formattedTime]; // 点赞按钮 NSString *likeText = comment.likeCount > 0 ? [self formatLikeCount:comment.likeCount] : @"赞"; self.likeButton.textLabel.text = likeText; UIImage *likeImage = comment.liked ? [UIImage imageNamed:@"comment_sel_icon"] : [UIImage imageNamed:@"comment_nor_icon"]; self.likeButton.iconView.image = likeImage; } - (NSString *)formatLikeCount:(NSInteger)count { if (count >= 10000) { return [NSString stringWithFormat:@"%.1fw", count / 10000.0]; } else if (count >= 1000) { return [NSString stringWithFormat:@"%.1fk", count / 1000.0]; } return [NSString stringWithFormat:@"%ld", (long)count]; } #pragma mark - Actions - (void)likeButtonTapped { if (self.onLikeAction) { self.onLikeAction(); } } - (void)replyButtonTapped { if (self.onReplyAction) { self.onReplyAction(); } } #pragma mark - Lazy Loading - (UIImageView *)avatarImageView { if (!_avatarImageView) { _avatarImageView = [[UIImageView alloc] init]; _avatarImageView.contentMode = UIViewContentModeScaleAspectFill; _avatarImageView.layer.cornerRadius = 14; _avatarImageView.layer.masksToBounds = YES; _avatarImageView.backgroundColor = [UIColor systemGray5Color]; } return _avatarImageView; } - (UILabel *)userNameLabel { if (!_userNameLabel) { _userNameLabel = [[UILabel alloc] init]; _userNameLabel.text = @"--"; _userNameLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium]; _userNameLabel.textColor = [UIColor colorWithHex:0x9F9F9F]; } return _userNameLabel; } - (UILabel *)contentLabel { if (!_contentLabel) { _contentLabel = [[UILabel alloc] init]; _contentLabel.font = [UIFont systemFontOfSize:12]; _contentLabel.textColor = [UIColor whiteColor]; _contentLabel.numberOfLines = 0; } return _contentLabel; } - (UILabel *)timeLabel { if (!_timeLabel) { _timeLabel = [[UILabel alloc] init]; _timeLabel.font = [UIFont systemFontOfSize:12]; _timeLabel.textColor = [UIColor colorWithHex:0x9F9F9F]; } return _timeLabel; } - (UIButton *)replyButton { if (!_replyButton) { _replyButton = [UIButton buttonWithType:UIButtonTypeCustom]; _replyButton.titleLabel.font = [UIFont systemFontOfSize:12]; [_replyButton setTitle:@"回复" forState:UIControlStateNormal]; [_replyButton setTitleColor:[UIColor colorWithHex:0x9F9F9F] forState:UIControlStateNormal]; [_replyButton addTarget:self action:@selector(replyButtonTapped) forControlEvents:UIControlEventTouchUpInside]; } return _replyButton; } - (KBTopImageButton *)likeButton { if (!_likeButton) { _likeButton = [[KBTopImageButton alloc] init]; _likeButton.iconSize = CGSizeMake(20, 20); _likeButton.spacing = 2; _likeButton.iconView.image = [UIImage imageNamed:@"comment_nor_icon"]; _likeButton.textLabel.font = [UIFont systemFontOfSize:10]; _likeButton.textLabel.textColor = [UIColor colorWithHex:0xC5BEB4]; [_likeButton addTarget:self action:@selector(likeButtonTapped) forControlEvents:UIControlEventTouchUpInside]; } return _likeButton; } @end