聊天界面布局完成,下面我们来完成发送消息功能。
连线设置textView的为聊天控制器。
然后监听textView文字的改变,如果用户有输入回车符,表示“发送”消息
#pragma mark - UITextViewDelegate
- (void)textViewDidChange:(UITextView *)textView
{
//监听用户是否点击了键盘的"Send"按钮 -- 判断最后一个字符是否是换行符
if ([textView.text hasSuffix:@"\n"]) {
// 1.发送消息
[self sendMessage:textView.text];
// 2.清空textView中的文字
textView.text = nil;
}
}具体发送消息的方法:/**
* 发送消息
*/
- (void)sendMessage:(NSString *)text
{
// 0.准备创建消息实例需要的参数
EMChatText *chatText = [[EMChatText alloc] initWithText:text];
EMTextMessageBody *textBody = [[EMTextMessageBody alloc] initWithChatObject:chatText];
// 1.创建一个消息实例
EMMessage *msg = [[EMMessage alloc] initWithReceiver:self.buddy.username bodies:@[textBody]];
// 2.发送消息
[[EaseMob sharedInstance].chatManager asyncSendMessage:msg progress:nil prepare:^(EMMessage *message, EMError *error) {
// 准备发送
} onQueue:nil completion:^(EMMessage *message, EMError *error) {
// 完成发送
} onQueue:nil];
}在上面方法里我们用到了好用的名称self.buddy.username,所以我们需要从联系人控制器里 传递好友模型到聊天控制来。
1.在聊天控制器定义属性:
//
// ChatViewController.h
#import <UIKit/UIKit.h>
@class EMBuddy;
@interface ChatViewController : UIViewController
/**
* 好友
*/
@property(nonatomic,strong)EMBuddy *buddy;
@end
2.联系人控制器传递好友数据:/**
* 因为是通过连线的形式跳转到下一个界面
* 所以要传递数据到下一个控制器在这个方法里
*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// 往聊天控制器传递一个buddy
id destVC = segue.destinationViewController;
if ([destVC isKindOfClass:[ChatViewController class]]) {
// 获取选中的行
NSInteger selectedRow = [self.tableView indexPathForSelectedRow].row;
// 传递"好友"数据给聊天控制器
ChatViewController *chatVC = destVC;
chatVC.buddy = self.buddyList[selectedRow];
}
}自此发送消息的功能完成,后面我们在处理怎么把消息显示到聊天界面的tableView里。
本文详细介绍如何在iOS聊天应用中实现消息发送功能,包括监听用户输入、处理回车键发送消息、创建并发送EMMessage实例等关键步骤。
2200

被折叠的 条评论
为什么被折叠?



