消息模块-消息底部操作栏
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user