123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- //
- // NIMSessionTableDelegate.m
- // NIMKit
- //
- // Created by chris on 2016/11/7.
- // Copyright © 2016年 NetEase. All rights reserved.
- //
- #import "NIMSessionTableAdapter.h"
- #import "NIMMessageModel.h"
- #import "NIMMessageCellFactory.h"
- #import "UIView+NIM.h"
- @interface NIMSessionTableAdapter()
- @property (nonatomic,strong) NIMMessageCellFactory *cellFactory;
- @end
- @implementation NIMSessionTableAdapter
- - (instancetype)init
- {
- self = [super init];
- if (self) {
- _cellFactory = [[NIMMessageCellFactory alloc] init];
- }
- return self;
- }
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- return 1;
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- return [self.interactor items].count;
- }
- - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- UITableViewCell *cell = nil;
- id model = [[self.interactor items] objectAtIndex:indexPath.row];
- if ([model isKindOfClass:[NIMMessageModel class]]) {
- cell = [self.cellFactory cellInTable:tableView
- forMessageMode:model];
- [(NIMMessageCell *)cell setDelegate:self.delegate];
- [(NIMMessageCell *)cell refreshData:model];
- }
- else if ([model isKindOfClass:[NIMTimestampModel class]])
- {
- cell = [self.cellFactory cellInTable:tableView
- forTimeModel:model];
- }
- else
- {
- NSAssert(0, @"not support model");
- }
- return cell;
- }
- - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
- {
- if ([self.delegate respondsToSelector:@selector(tableView:willDisplayCell:forRowAtIndexPath:)])
- {
- [self.delegate tableView:tableView willDisplayCell:cell forRowAtIndexPath:indexPath];
- }
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- CGFloat cellHeight = 0;
- id modelInArray = [[self.interactor items] objectAtIndex:indexPath.row];
- if ([modelInArray isKindOfClass:[NIMMessageModel class]])
- {
- NIMMessageModel *model = (NIMMessageModel *)modelInArray;
-
- CGSize size = [model contentSize:tableView.nim_width];
-
- UIEdgeInsets contentViewInsets = model.contentViewInsets;
- UIEdgeInsets bubbleViewInsets = model.bubbleViewInsets;
- cellHeight = size.height + contentViewInsets.top + contentViewInsets.bottom + bubbleViewInsets.top + bubbleViewInsets.bottom;
- if ((model.message.messageType == NIMMessageTypeText ||
- model.message.messageType == NIMMessageTypeImage ||
- model.message.messageType == NIMMessageTypeAudio ||
- model.message.messageType == NIMMessageTypeVideo) &&
- ![LCSaveData getIsspecial] &&
- [[model.message.remoteExt objectForKey:@"is_cut"]integerValue] == 1 &&
- ![LCSaveData getWhiteVersion] &&
- !model.message.isOutgoingMsg
- ) {
- cellHeight += 28.0f;
- }
- }
- else if ([modelInArray isKindOfClass:[NIMTimestampModel class]])
- {
- cellHeight = [(NIMTimestampModel *)modelInArray height];
- }
- else
- {
- NSAssert(0, @"not support model");
- }
- return cellHeight;
- }
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
- [[UIMenuController sharedMenuController] setMenuVisible:NO animated:YES];
- CGFloat currentOffsetY = scrollView.contentOffset.y;
- if (currentOffsetY + scrollView.frame.size.height > scrollView.contentSize.height\
- && scrollView.frame.size.height <= scrollView.contentSize.height && scrollView.isDragging) {
- [self.interactor pullUp];
- }
- }
- @end
|