// // KBChatPanelView.m // CustomKeyboard // #import "KBChatPanelView.h" #import "KBChatMessage.h" #import "KBChatMessageCell.h" #import "Masonry.h" @interface KBChatPanelView () @property (nonatomic, strong) UITableView *tableViewInternal; @property (nonatomic, copy) NSArray *messages; @end @implementation KBChatPanelView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor colorWithHex:0xD1D3DB]; [self addSubview:self.tableViewInternal]; [self.tableViewInternal mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self); make.top.equalTo(self.mas_top).offset(8); make.bottom.equalTo(self.mas_bottom).offset(-8); }]; } return self; } #pragma mark - Public - (void)kb_reloadWithMessages:(NSArray *)messages { self.messages = messages ?: @[]; [self.tableViewInternal reloadData]; if (self.messages.count > 0) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.messages.count - 1 inSection:0]; [self.tableViewInternal scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; } } #pragma mark - UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.messages.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { KBChatMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(KBChatMessageCell.class)]; KBChatMessage *msg = self.messages[indexPath.row]; [cell kb_configureWithMessage:msg]; return cell; } #pragma mark - UITableViewDelegate - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return 44.0; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row >= self.messages.count) { return; } KBChatMessage *msg = self.messages[indexPath.row]; if ([self.delegate respondsToSelector:@selector(chatPanelView:didTapMessage:)]) { [self.delegate chatPanelView:self didTapMessage:msg]; } } #pragma mark - Lazy - (UITableView *)tableViewInternal { if (!_tableViewInternal) { _tableViewInternal = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; _tableViewInternal.backgroundColor = [UIColor clearColor]; _tableViewInternal.separatorStyle = UITableViewCellSeparatorStyleNone; _tableViewInternal.dataSource = self; _tableViewInternal.delegate = self; _tableViewInternal.estimatedRowHeight = 44.0; _tableViewInternal.rowHeight = UITableViewAutomaticDimension; [_tableViewInternal registerClass:KBChatMessageCell.class forCellReuseIdentifier:NSStringFromClass(KBChatMessageCell.class)]; } return _tableViewInternal; } #pragma mark - Expose - (UITableView *)tableView { return self.tableViewInternal; } @end