TUIMemberCell.m 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // TUIMemberCell.m
  3. // TUIChat
  4. //
  5. // Created by xia on 2022/3/11.
  6. // Copyright © 2023 Tencent. All rights reserved.
  7. //
  8. #import "TUIMemberCell.h"
  9. #import <TIMCommon/TIMCommonModel.h>
  10. #import <TIMCommon/TIMDefine.h>
  11. #import <TUICore/TUIThemeManager.h>
  12. #import "TUIMemberCellData.h"
  13. @interface TUIMemberCell ()
  14. @property(nonatomic, strong) UIImageView *avatarView;
  15. @property(nonatomic, strong) UILabel *titleLabel;
  16. @property(nonatomic, strong) UILabel *detailLabel;
  17. @property(nonatomic, strong) TUIMemberCellData *cellData;
  18. @end
  19. @implementation TUIMemberCell
  20. #pragma mark - Life cycle
  21. - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
  22. self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  23. if (self) {
  24. self.contentView.backgroundColor = TIMCommonDynamicColor(@"form_bg_color", @"#FFFFFF");
  25. self.avatarView = [[UIImageView alloc] initWithImage:DefaultAvatarImage];
  26. [self.contentView addSubview:self.avatarView];
  27. self.titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  28. [self.contentView addSubview:self.titleLabel];
  29. self.titleLabel.textColor = TIMCommonDynamicColor(@"form_title_color", @"#000000");
  30. self.detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
  31. [self.contentView addSubview:self.detailLabel];
  32. self.detailLabel.rtlAlignment = TUITextRTLAlignmentTrailing;
  33. self.detailLabel.textColor = TIMCommonDynamicColor(@"form_title_color", @"#000000");
  34. [self setSelectionStyle:UITableViewCellSelectionStyleNone];
  35. self.changeColorWhenTouched = YES;
  36. }
  37. return self;
  38. }
  39. - (void)layoutSubviews {
  40. [super layoutSubviews];
  41. }
  42. #pragma mark - Public
  43. - (void)fillWithData:(TUIMemberCellData *)cellData {
  44. [super fillWithData:cellData];
  45. self.cellData = cellData;
  46. self.titleLabel.text = cellData.title;
  47. [self.avatarView sd_setImageWithURL:cellData.avatarUrL placeholderImage:DefaultAvatarImage];
  48. self.detailLabel.hidden = cellData.detail.length == 0;
  49. self.detailLabel.text = cellData.detail;
  50. // tell constraints they need updating
  51. [self setNeedsUpdateConstraints];
  52. // update constraints now so we can animate the change
  53. [self updateConstraintsIfNeeded];
  54. [self layoutIfNeeded];
  55. }
  56. + (BOOL)requiresConstraintBasedLayout {
  57. return YES;
  58. }
  59. // this is Apple's recommended place for adding/updating constraints
  60. - (void)updateConstraints {
  61. [super updateConstraints];
  62. CGFloat imgWidth = kScale390(34);
  63. [self.avatarView mas_remakeConstraints:^(MASConstraintMaker *make) {
  64. make.width.height.mas_equalTo(imgWidth);
  65. make.centerY.mas_equalTo(self.contentView.mas_centerY);
  66. make.leading.mas_equalTo(kScale390(12));
  67. }];
  68. if ([TUIConfig defaultConfig].avatarType == TAvatarTypeRounded) {
  69. self.avatarView.layer.masksToBounds = YES;
  70. self.avatarView.layer.cornerRadius = imgWidth / 2;
  71. } else if ([TUIConfig defaultConfig].avatarType == TAvatarTypeRadiusCorner) {
  72. self.avatarView.layer.masksToBounds = YES;
  73. self.avatarView.layer.cornerRadius = [TUIConfig defaultConfig].avatarCornerRadius;
  74. }
  75. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  76. make.centerY.mas_equalTo(self.avatarView.mas_centerY);
  77. make.leading.mas_equalTo(self.avatarView.mas_trailing).mas_offset(12);
  78. make.height.mas_equalTo(20);
  79. make.trailing.lessThanOrEqualTo(self.detailLabel.mas_leading).mas_offset(-5);
  80. }];
  81. [self.detailLabel sizeToFit];
  82. [self.detailLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  83. make.centerY.mas_equalTo(self.avatarView.mas_centerY);
  84. make.height.mas_equalTo(20);
  85. make.trailing.mas_equalTo(self.contentView.mas_trailing).mas_offset(-3);
  86. make.width.mas_equalTo(self.detailLabel.frame.size.width);
  87. }];
  88. }
  89. @end