NIMAdvancedTeamMemberCell.m 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. //
  2. // NIMAdvancedTeamMemberCell.m
  3. // NIM
  4. //
  5. // Created by chris on 15/3/26.
  6. // Copyright (c) 2015年 Netease. All rights reserved.
  7. //
  8. #import "NIMAdvancedTeamMemberCell.h"
  9. #import "UIView+NIM.h"
  10. #import "NIMUsrInfoData.h"
  11. #import "NIMAvatarImageView.h"
  12. #import "NIMKitUtil.h"
  13. #import "NIMKit.h"
  14. #import "UIImage+NIMKit.h"
  15. @interface NIMAdvancedTeamMemberView : UIView{
  16. }
  17. @property(nonatomic,strong) NIMAvatarImageView *imageView;
  18. @property(nonatomic,strong) UILabel *titleLabel;
  19. @property(nonatomic,strong) NIMKitInfo *member;
  20. @end
  21. #define RegularTeamMemberViewHeight 53
  22. #define RegularTeamMemberViewWidth 38
  23. @implementation NIMAdvancedTeamMemberView
  24. - (instancetype)initWithFrame:(CGRect)frame{
  25. self = [super initWithFrame:frame];
  26. if (self) {
  27. _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  28. _titleLabel.backgroundColor = [UIColor clearColor];
  29. _titleLabel.font = [UIFont systemFontOfSize:12.f];
  30. [self addSubview:_titleLabel];
  31. _imageView = [[NIMAvatarImageView alloc] initWithFrame:CGRectMake(0, 0, 37, 37)];
  32. [self addSubview:_imageView];
  33. }
  34. return self;
  35. }
  36. - (void)setMember:(NIMKitInfo *)member{
  37. _member = member;
  38. NSURL *avatarURL;
  39. if (member.avatarUrlString.length) {
  40. avatarURL = [NSURL URLWithString:member.avatarUrlString];
  41. }
  42. [_imageView nim_setImageWithURL:avatarURL placeholderImage:member.avatarImage];
  43. }
  44. - (CGSize)sizeThatFits:(CGSize)size{
  45. return CGSizeMake(RegularTeamMemberViewWidth, RegularTeamMemberViewHeight);
  46. }
  47. #define RegularTeamMemberInvite
  48. - (void)layoutSubviews{
  49. [super layoutSubviews];
  50. [self.titleLabel sizeToFit];
  51. self.titleLabel.nim_width = _titleLabel.nim_width > self.nim_width ? self.nim_width : _titleLabel.nim_width;
  52. self.imageView.nim_centerX = self.nim_width * .5f;
  53. self.titleLabel.nim_centerX = self.nim_width * .5f;
  54. self.titleLabel.nim_bottom = self.nim_height;
  55. }
  56. @end
  57. @interface NIMAdvancedTeamMemberCell()
  58. @property(nonatomic,strong) NSMutableArray *icons;
  59. @property(nonatomic,strong) NIMTeam *team;
  60. @property(nonatomic,copy) NSArray *teamMembers;
  61. @property(nonatomic,strong) UIButton *addBtn;
  62. @end
  63. @implementation NIMAdvancedTeamMemberCell
  64. - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  65. self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  66. if (self) {
  67. _icons = [[NSMutableArray alloc] init];
  68. _addBtn = [[UIButton alloc]initWithFrame:CGRectZero];
  69. [_addBtn addTarget:self action:@selector(onPress:) forControlEvents:UIControlEventTouchUpInside];
  70. _addBtn.userInteractionEnabled = NO;
  71. [self addSubview:_addBtn];
  72. }
  73. return self;
  74. }
  75. - (void)rereshWithTeam:(NIMTeam*)team
  76. members:(NSArray*)members
  77. width:(CGFloat)width{
  78. _team = team;
  79. _teamMembers = members;
  80. NIMTeamMember *myTeamInfo;
  81. for (NIMTeamMember *member in members) {
  82. if ([member.userId isEqualToString:[NIMSDK sharedSDK].loginManager.currentAccount]) {
  83. myTeamInfo = member;
  84. break;
  85. }
  86. }
  87. NSInteger count = 0;
  88. if ([NIMKitUtil canInviteMember:myTeamInfo]) {
  89. NIMAdvancedTeamMemberView *view = [self fetchMemeberView:0];
  90. UIImage *addImage = [UIImage nim_imageInKit:@"icon_add_normal"];
  91. [view.imageView nim_setImageWithURL:nil placeholderImage:addImage];
  92. view.titleLabel.text = @"邀请";
  93. count = 1;
  94. self.addBtn.userInteractionEnabled = YES;
  95. }else{
  96. self.addBtn.userInteractionEnabled = NO;
  97. }
  98. CGFloat padding = 44.f;
  99. CGFloat itemWidth = 49.f;
  100. NSInteger maxIconCount = (width - padding) / itemWidth;
  101. NSInteger iconCount = members.count > maxIconCount-count ? maxIconCount : members.count + count;
  102. NIMSession *session = [NIMSession session:team.teamId type:NIMSessionTypeTeam];
  103. for (UIView *view in _icons) {
  104. [view removeFromSuperview];
  105. }
  106. for (NSInteger i = 0; i < iconCount; i++) {
  107. NIMAdvancedTeamMemberView *view = [self fetchMemeberView:i];
  108. if (!count || i != 0) {
  109. NSInteger memberIndex = i - count;
  110. NIMTeamMember *member = members[memberIndex];
  111. NIMKitInfo *info = [[NIMKit sharedKit] infoByUser:member.userId option:nil];
  112. view.member = info;
  113. view.titleLabel.text = [NIMKitUtil showNick:member.userId inSession:session];
  114. }
  115. [self addSubview:view];
  116. [view setNeedsLayout];
  117. }
  118. [self bringSubviewToFront:self.addBtn];
  119. }
  120. - (void)onPress:(id)sender{
  121. if ([self.delegate respondsToSelector:@selector(didSelectAddOpeartor)]) {
  122. [self.delegate didSelectAddOpeartor];
  123. }
  124. }
  125. - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
  126. CGRect hitRect = self.addBtn.frame;
  127. return CGRectContainsPoint(hitRect, point) ? self.addBtn : [super hitTest:point withEvent:event];
  128. }
  129. - (void)layoutSubviews{
  130. [super layoutSubviews];
  131. _addBtn.frame = CGRectMake(0, 0, self.nim_width *.20f, self.nim_height);
  132. CGFloat left = 20.f;
  133. CGFloat top = 17.f;
  134. self.textLabel.nim_left = left;
  135. self.textLabel.nim_top = top;
  136. self.detailTextLabel.nim_top = top;
  137. self.accessoryView.nim_top = top;
  138. CGFloat spacing = 12.f;
  139. CGFloat bottom = 10.f;
  140. for (NIMAdvancedTeamMemberView *view in _icons) {
  141. view.nim_left = left;
  142. left += view.nim_width;
  143. left += spacing;
  144. view.nim_bottom = self.nim_height - bottom;
  145. }
  146. }
  147. #pragma mark - Private
  148. - (NIMAdvancedTeamMemberView *)fetchMemeberView:(NSInteger)index{
  149. if (_icons.count <= index) {
  150. for (int i = 0; i < index - _icons.count + 1 ; i++) {
  151. NIMAdvancedTeamMemberView *view = [[NIMAdvancedTeamMemberView alloc]initWithFrame:CGRectZero];
  152. view.userInteractionEnabled = NO;
  153. [view sizeToFit];
  154. [_icons addObject:view];
  155. }
  156. }
  157. return _icons[index];
  158. }
  159. @end