NIMSessionTableAdapter.m 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // NIMSessionTableDelegate.m
  3. // NIMKit
  4. //
  5. // Created by chris on 2016/11/7.
  6. // Copyright © 2016年 NetEase. All rights reserved.
  7. //
  8. #import "NIMSessionTableAdapter.h"
  9. #import "NIMMessageModel.h"
  10. #import "NIMMessageCellFactory.h"
  11. #import "UIView+NIM.h"
  12. @interface NIMSessionTableAdapter()
  13. @property (nonatomic,strong) NIMMessageCellFactory *cellFactory;
  14. @end
  15. @implementation NIMSessionTableAdapter
  16. - (instancetype)init
  17. {
  18. self = [super init];
  19. if (self) {
  20. _cellFactory = [[NIMMessageCellFactory alloc] init];
  21. }
  22. return self;
  23. }
  24. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  25. {
  26. return 1;
  27. }
  28. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  29. {
  30. return [self.interactor items].count;
  31. }
  32. - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  33. {
  34. UITableViewCell *cell = nil;
  35. id model = [[self.interactor items] objectAtIndex:indexPath.row];
  36. if ([model isKindOfClass:[NIMMessageModel class]]) {
  37. cell = [self.cellFactory cellInTable:tableView
  38. forMessageMode:model];
  39. [(NIMMessageCell *)cell setDelegate:self.delegate];
  40. [(NIMMessageCell *)cell refreshData:model];
  41. }
  42. else if ([model isKindOfClass:[NIMTimestampModel class]])
  43. {
  44. cell = [self.cellFactory cellInTable:tableView
  45. forTimeModel:model];
  46. }
  47. else
  48. {
  49. NSAssert(0, @"not support model");
  50. }
  51. return cell;
  52. }
  53. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  54. {
  55. if ([self.delegate respondsToSelector:@selector(tableView:willDisplayCell:forRowAtIndexPath:)])
  56. {
  57. [self.delegate tableView:tableView willDisplayCell:cell forRowAtIndexPath:indexPath];
  58. }
  59. }
  60. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  61. {
  62. CGFloat cellHeight = 0;
  63. id modelInArray = [[self.interactor items] objectAtIndex:indexPath.row];
  64. if ([modelInArray isKindOfClass:[NIMMessageModel class]])
  65. {
  66. NIMMessageModel *model = (NIMMessageModel *)modelInArray;
  67. CGSize size = [model contentSize:tableView.nim_width];
  68. UIEdgeInsets contentViewInsets = model.contentViewInsets;
  69. UIEdgeInsets bubbleViewInsets = model.bubbleViewInsets;
  70. cellHeight = size.height + contentViewInsets.top + contentViewInsets.bottom + bubbleViewInsets.top + bubbleViewInsets.bottom;
  71. if ((model.message.messageType == NIMMessageTypeText ||
  72. model.message.messageType == NIMMessageTypeImage ||
  73. model.message.messageType == NIMMessageTypeAudio ||
  74. model.message.messageType == NIMMessageTypeVideo) &&
  75. ![LCSaveData getIsspecial] &&
  76. [[model.message.remoteExt objectForKey:@"is_cut"]integerValue] == 1 &&
  77. ![LCSaveData getWhiteVersion] &&
  78. !model.message.isOutgoingMsg
  79. ) {
  80. cellHeight += 28.0f;
  81. }
  82. }
  83. else if ([modelInArray isKindOfClass:[NIMTimestampModel class]])
  84. {
  85. cellHeight = [(NIMTimestampModel *)modelInArray height];
  86. }
  87. else
  88. {
  89. NSAssert(0, @"not support model");
  90. }
  91. return cellHeight;
  92. }
  93. - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  94. [[UIMenuController sharedMenuController] setMenuVisible:NO animated:YES];
  95. CGFloat currentOffsetY = scrollView.contentOffset.y;
  96. if (currentOffsetY + scrollView.frame.size.height > scrollView.contentSize.height\
  97. && scrollView.frame.size.height <= scrollView.contentSize.height && scrollView.isDragging) {
  98. [self.interactor pullUp];
  99. }
  100. }
  101. @end