@@ -39,7 +39,24 @@ - (ChatKeyboard *)customKeyboard
3939 if (!_customKeyboard) {
4040 _customKeyboard = [[ChatKeyboard alloc ]init];
4141 // 传入当前控制器 ,方便打开相册(如放到控制器 , 后期的逻辑过多,控制器会更加臃肿)
42- _customKeyboard.target = self;
42+ __weak typeof (self) weakself = self;
43+ // 普通文本消息
44+ [_customKeyboard textCallback: ^(ChatModel *textModel) {
45+
46+ [weakself sendTextMessage: textModel];
47+ // 语音消息
48+ } audioCallback: ^(ChatModel *audioModel) {
49+
50+ [weakself sendAudioMessage: audioModel];
51+ // 图片消息
52+ } picCallback: ^(ChatModel *picModel) {
53+
54+ [weakself sendPictureMessage: picModel];
55+ // 视频消息
56+ } videoCallback: ^(ChatModel *videoModel) {
57+
58+ [weakself sendVideoMessage: videoModel];
59+ } target: self ];
4360 }
4461 return _customKeyboard;
4562}
@@ -77,6 +94,8 @@ - (UITableView *)chatTableView
7794{
7895 if (!_chatTableView) {
7996 _chatTableView = [[UITableView alloc ]initWithFrame:Frame (0 , 0 , SCREEN_WITDTH, Height (self .view.bounds)-49 ) style: UITableViewStylePlain];
97+ _chatTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
98+ _chatTableView.allowsSelection = NO ;
8099 _chatTableView.delegate = self;
81100 _chatTableView.dataSource = self;
82101 // 普通文本,表情消息类型
@@ -104,6 +123,15 @@ - (void)viewDidLoad {
104123 [self getHistoryMessages ];
105124}
106125
126+ #pragma mark - 注册通知
127+ - (void )viewWillAppear : (BOOL )animated
128+ {
129+ [super viewWillAppear: animated];
130+ // 键盘弹起通知
131+ [[NSNotificationCenter defaultCenter ]addObserver:self .customKeyboard selector: @selector (systemKeyboardWillShow: ) name: UIKeyboardWillShowNotification object: nil ];
132+
133+ }
134+
107135#pragma mark - dataSource
108136
109137- (NSInteger )tableView : (UITableView *)tableView numberOfRowsInSection : (NSInteger )section
@@ -114,12 +142,11 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger
114142- (UITableViewCell *)tableView : (UITableView *)tableView cellForRowAtIndexPath : (NSIndexPath *)indexPath
115143{
116144 ChatModel *chatModel = self.talkMessages [indexPath.row];
117-
118145 // 文本,表情消息
119146 if (hashEqual (chatModel.contenType , Content_Text)) {
120147
121148 ChatTextCell *textCell = [tableView dequeueReusableCellWithIdentifier: @" ChatTextCell" ];
122-
149+ textCell. textModel = chatModel;
123150 return textCell;
124151
125152 // 语音消息
@@ -159,18 +186,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
159186 }
160187}
161188
162- #pragma mark - delegate
163-
164- - (CGFloat)tableView : (UITableView *)tableView heightForRowAtIndexPath : (NSIndexPath *)indexPath
165- {
166- ChatModel *chatmodel = self.talkMessages [indexPath.row];
167- ChatModel *premodel = nil ;
168- if (self.talkMessages .count > 1 ) premodel = self.talkMessages [self .talkMessages.count - 2 ];
169- // 如果已经计算过 , 直接返回高度
170- if (chatmodel.messageHeight ) return chatmodel.messageHeight ;
171- // 计算消息高度
172- return [ChatUtil heightForMessage: chatmodel premodel: premodel];
173- }
174189
175190#pragma mark - 拉取数据库消息
176191- (void )getHistoryMessages
@@ -182,7 +197,7 @@ - (void)getHistoryMessages
182197- (void )initUI
183198{
184199 // 初始化导航
185- self.titleView .text = [_chatModel.chatType isEqualToString: @" groupChat" ] ? _chatModel.groupName : _chatModel.nickName ;
200+ self.titleView .text = [_chatModel.chatType isEqualToString: @" groupChat" ] ? _chatModel.groupName : _chatModel.toNickName ;
186201 self.navigationItem .titleView = self.titleView ;
187202 CGSize titleSize = [self .titleView.text sizeWithFont: self .titleView.font maxSize: CGSizeMake (200 ,16 )];
188203 // 正常接收消息状态
@@ -193,21 +208,38 @@ - (void)initUI
193208 self.titleView .bounds = Frame (0 , 0 , titleSize.width + 5 + 14 , 16 );
194209 self.bellView .frame = Frame (titleSize.width + 5 , (Height (self.titleView .frame )-14 )*0.5 , 14 , 14 );
195210 }
196-
197211 // 初始化聊天界面
198212 [self .view addSubview: self .chatTableView];
199-
200213 // 初始化键盘
201214 [self .view addSubview: self .customKeyboard];
202215 self.customKeyboard .frame = Frame (0 , SCREEN_HEIGHT - 49 , SCREEN_WITDTH, CTKEYBOARD_DEFAULTHEIGHT);
203216}
204217
205- #pragma mark - 注册通知
206- - (void )viewWillAppear : (BOOL )animated
218+
219+ #pragma mark - 发送文本/表情消息
220+ - (void )sendTextMessage : (ChatModel *)textModel
221+ {
222+ [self .talkMessages addObject: textModel];
223+ [self .chatTableView reloadData ];
224+ NSIndexPath *indexPath = [NSIndexPath indexPathForRow: _talkMessages.count - 1 inSection: 0 ];
225+ [self .chatTableView scrollToRowAtIndexPath: indexPath atScrollPosition: UITableViewScrollPositionNone animated: YES ];
226+ }
227+
228+ #pragma mark - 发送语音消息
229+ - (void )sendAudioMessage : (ChatModel *)audioModel
230+ {
231+
232+ }
233+
234+ #pragma mark - 发送图片消息
235+ - (void )sendPictureMessage : (ChatModel *)picModel
236+ {
237+
238+ }
239+
240+ #pragma mark - 发送视频消息
241+ - (void )sendVideoMessage : (ChatModel *)videoModel
207242{
208- [super viewWillAppear: animated];
209- // 键盘弹起通知
210- [[NSNotificationCenter defaultCenter ]addObserver:self .customKeyboard selector: @selector (systemKeyboardWillShow: ) name: UIKeyboardWillShowNotification object: nil ];
211243
212244}
213245
@@ -217,4 +249,16 @@ - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
217249
218250}
219251
252+ #pragma mark - delegate
253+ - (CGFloat)tableView : (UITableView *)tableView heightForRowAtIndexPath : (NSIndexPath *)indexPath
254+ {
255+ ChatModel *chatmodel = self.talkMessages [indexPath.row];
256+ ChatModel *premodel = nil ;
257+ if (self.talkMessages .count > 1 ) premodel = self.talkMessages [self .talkMessages.count - 2 ];
258+ // 如果已经计算过 , 直接返回高度
259+ if (chatmodel.messageHeight ) return chatmodel.messageHeight ;
260+ // 计算消息高度
261+ return [ChatUtil heightForMessage: chatmodel premodel: premodel];
262+ }
263+
220264@end
0 commit comments