消息模块-消息底部操作栏

This commit is contained in:
fengshuo
2022-04-21 16:10:28 +08:00
parent 1f85a06293
commit 27de34b0d5
26 changed files with 743 additions and 289 deletions

View File

@@ -6,40 +6,41 @@
//
#import "SessionViewController.h"
#import "MessageCell.h"
#import "SendMessageView.h"
#import "SessionChatLimitView.h"
#import "UITableView+NIMScrollToBottom.h"
#import <Masonry/Masonry.h>
#import <IQKeyboardManager/IQKeyboardManager.h>
///Tool
#import "XCCurrentVCStackManager.h"
#import "NIMMessageMaker.h"
#import "XPMacro.h"
#import <Masonry/Masonry.h>
#import "MessagePresenter.h"
#import "MessageProtocol.h"
#import "UITableView+NIMScrollToBottom.h"
///Model
#import "RoomInfoModel.h"
#import "UserInfoModel.h"
#import "MessageMenuModel.h"
///View
#import "XPSessionMessageHeadView.h"
#import "XPMineUserInfoViewController.h"
#import "XPRoomViewController.h"
#import "RoomHostDelegate.h"
///Model
#import "RoomInfoModel.h"
#import "UserInfoModel.h"
///Tool
#import "XCCurrentVCStackManager.h"
#import "SessionToolbarView.h"
#import "MessageCell.h"
#import "SessionChatLimitView.h"
///P
#import "MessagePresenter.h"
#import "MessageProtocol.h"
@interface SessionViewController ()<MessageProtocol, UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate, SendMessageViewDelegate, XPSessionMessageHeadViewDelegate, MessageCellDelegate>
@interface SessionViewController ()<MessageProtocol, UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate, XPSessionMessageHeadViewDelegate, MessageCellDelegate, SessionToolbarViewDelegate>
@property (nonatomic, strong) NIMSession * session;
@property (nonatomic, strong) NSMutableArray<NIMMessage *> * messages;
@property (nonatomic, strong) UITableView * sessionTableView;
@property (nonatomic, strong) SendMessageView * sendMessageView;
///
@property (nonatomic, strong) XPSessionMessageHeadView *followInRoomView;
@property (nonatomic, strong) UserInfoModel *userInfo;
///
@property (nonatomic,strong) SessionToolbarView *toolbarView;
@end
@implementation SessionViewController
@@ -59,18 +60,19 @@
self = [super init];
if (self) {
_session = session;
[self initViews];
[self initLayout];
[self initViews];
[self initLayout];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[IQKeyboardManager sharedManager].enable = NO;
[IQKeyboardManager sharedManager].enableAutoToolbar = NO;
[self initData];
[[NIMSDK sharedSDK].chatManager addDelegate:self];
[[NIMSDK sharedSDK].conversationManager addDelegate:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[self.presenter getUserInfo:self.session.sessionId];
}
@@ -84,7 +86,7 @@
[self.view addSubview:self.followInRoomView];
[self.view addSubview:self.sessionTableView];
[self.view addSubview:self.sendMessageView];
[self.view addSubview:self.toolbarView];
}
- (void)initLayout {
@@ -94,12 +96,13 @@
}];
[self.sessionTableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.sendMessageView.mas_top);
make.bottom.mas_equalTo(self.toolbarView.mas_top);
}];
[self.sendMessageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.bottom.mas_equalTo(self.view);
}];
[self.toolbarView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.view);
}];
}
- (void)initData {
@@ -119,17 +122,6 @@
[self.presenter getChatLimitReceiverUid:self.session.sessionId];
}
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
NSNumber *curve = [info objectForKey:UIKeyboardAnimationCurveUserInfoKey];
CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
UIViewAnimationOptions options = (UIViewAnimationOptions)curve << 16;
[UIView animateWithDuration:duration delay:0.0 options:options animations:^{
[self.sessionTableView nim_scrollToBottom:YES];
} completion:nil];
}
#pragma mark - MessageProtocol
- (void)onGetLimitChat:(ChatLimitModel *)chatLimit {
BOOL chatDisabled = !chatLimit.chat && self.messages.count <= 0;
@@ -139,7 +131,7 @@
} else {
self.sessionTableView.tableHeaderView = nil;
}
self.sendMessageView.sendDisabled = chatDisabled;
self.toolbarView.sendDisabled = chatDisabled;
}
///
@@ -190,6 +182,10 @@
return [MessageCell measureHeight:msg];
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[self.toolbarView foldMenuView];
}
#pragma mark - NIMChatManagerDelegate
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages {
NIMMessage *message = messages.firstObject;
@@ -270,12 +266,33 @@
}
}
#pragma mark - SendMessageViewDelegate
- (void)sendTextMessage:(NSString *)text {
NIMMessage *message = [NIMMessageMaker msgWithText:text];
[[[NIMSDK sharedSDK] chatManager] sendMessage:message toSession:self.session error:nil];
#pragma mark - MessageToolbarViewDelegate
- (void)keyboardWillChangeFrame:(CGRect)rect {
CGFloat heightFromBottom = rect.size.height;
heightFromBottom = MAX(0.0, heightFromBottom);
[self.toolbarView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.view).offset(-heightFromBottom);
}];
[self.sessionTableView nim_scrollToBottom:YES];
}
- (void)sendTextMessage:(NSString *)text {
NIMMessage *message = [NIMMessageMaker msgWithText:text];
[[[NIMSDK sharedSDK] chatManager] sendMessage:message toSession:self.session error:nil];
}
- (void)didSelectMenuItem:(MessageMenuModel *)info {
switch (info.type) {
case MessageMenuType_Photo:
break;
case MessageMenuType_Gift:
break;
default:
break;
}
}
#pragma mark - Getters And Setters
- (NSArray<NIMMessage *> *)messages {
if (!_messages) {
_messages = [[NSMutableArray alloc] init];
@@ -283,6 +300,12 @@
return _messages;
}
#pragma mark - Event Response
- (void)closeKeyBoard {
[self.view endEditing:YES];
[self.toolbarView foldMenuView];
}
- (UITableView *)sessionTableView {
if (!_sessionTableView) {
_sessionTableView = [[UITableView alloc] init];
@@ -297,20 +320,6 @@
return _sessionTableView;
}
- (void)closeKeyBoard {
[self.view endEditing:YES];
[self.sessionTableView endEditing:YES];
}
- (SendMessageView *)sendMessageView {
if (!_sendMessageView) {
_sendMessageView = [[SendMessageView alloc] init];
_sendMessageView.delegate = self;
_sendMessageView.sendDisabled = YES;
}
return _sendMessageView;
}
- (XPSessionMessageHeadView *)followInRoomView {
if (!_followInRoomView) {
_followInRoomView = [[XPSessionMessageHeadView alloc] init];
@@ -320,4 +329,12 @@
return _followInRoomView;
}
- (SessionToolbarView *)toolbarView {
if (!_toolbarView) {
_toolbarView = [[SessionToolbarView alloc] init];
_toolbarView.delegate = self;
}
return _toolbarView;
}
@end