// // 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 whiteColor]; [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(40); }]; [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.isLiked ? [UIImage systemImageNamed:@"heart.fill"] : [UIImage systemImageNamed:@"heart"]; self.likeButton.iconView.image = likeImage; self.likeButton.iconView.tintColor = comment.isLiked ? [UIColor systemRedColor] : [UIColor grayColor]; } - (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 = 20; _avatarImageView.layer.masksToBounds = YES; _avatarImageView.backgroundColor = [UIColor systemGray5Color]; } return _avatarImageView; } - (UILabel *)userNameLabel { if (!_userNameLabel) { _userNameLabel = [[UILabel alloc] init]; _userNameLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; _userNameLabel.textColor = [UIColor secondaryLabelColor]; } return _userNameLabel; } - (UILabel *)contentLabel { if (!_contentLabel) { _contentLabel = [[UILabel alloc] init]; _contentLabel.font = [UIFont systemFontOfSize:15]; _contentLabel.textColor = [UIColor labelColor]; _contentLabel.numberOfLines = 0; } return _contentLabel; } - (UILabel *)timeLabel { if (!_timeLabel) { _timeLabel = [[UILabel alloc] init]; _timeLabel.font = [UIFont systemFontOfSize:12]; _timeLabel.textColor = [UIColor secondaryLabelColor]; } return _timeLabel; } - (UIButton *)replyButton { if (!_replyButton) { _replyButton = [UIButton buttonWithType:UIButtonTypeCustom]; _replyButton.titleLabel.font = [UIFont systemFontOfSize:12]; [_replyButton setTitle:@"回复" forState:UIControlStateNormal]; [_replyButton setTitleColor:[UIColor secondaryLabelColor] 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 systemImageNamed:@"heart"]; _likeButton.iconView.tintColor = [UIColor grayColor]; _likeButton.textLabel.font = [UIFont systemFontOfSize:11]; _likeButton.textLabel.textColor = [UIColor grayColor]; [_likeButton addTarget:self action:@selector(likeButtonTapped) forControlEvents:UIControlEventTouchUpInside]; } return _likeButton; } @end