98 lines
3.3 KiB
Mathematica
98 lines
3.3 KiB
Mathematica
|
|
//
|
||
|
|
// KBChatPanelView.m
|
||
|
|
// CustomKeyboard
|
||
|
|
//
|
||
|
|
|
||
|
|
#import "KBChatPanelView.h"
|
||
|
|
#import "KBChatMessage.h"
|
||
|
|
#import "KBChatMessageCell.h"
|
||
|
|
#import "Masonry.h"
|
||
|
|
|
||
|
|
@interface KBChatPanelView () <UITableViewDataSource, UITableViewDelegate>
|
||
|
|
@property (nonatomic, strong) UITableView *tableViewInternal;
|
||
|
|
@property (nonatomic, copy) NSArray<KBChatMessage *> *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<KBChatMessage *> *)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
|