iOS 基于聊天页面如何实现批量转发和批量删除

iOS 如何使用 IMKit 实现类似微信的批量转发和批量删除功能
发布时间: 2019-07-24 14:15

回答:

iOS 如何实现批量转发和批量删除

在 RCConversationViewController 的子类的 viewDidLoad 方法中调用下面的方法


- (void)addToolbarItems {
    //转发按钮
    UIButton *forwardBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 40)];
    [forwardBtn setImage:[UIImage imageNamed:@"forward_message"] forState:UIControlStateNormal];
    [forwardBtn addTarget:self action:@selector(forwardMessage) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *forwardBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:forwardBtn];
    //删除按钮
    UIButton *deleteBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 40)];
    [deleteBtn setImage:[RCKitUtility imageNamed:@"delete_message" ofBundle:@"RongCloud.bundle"] forState:UIControlStateNormal];
    [deleteBtn addTarget:self action:@selector(deleteMessages) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *deleteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:deleteBtn];
    //按钮间 space
    UIBarButtonItem *spaceItem =
    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [self.messageSelectionToolbar setItems:@[spaceItem,forwardBarButtonItem,spaceItem,deleteBarButtonItem,spaceItem] animated:YES];
}


这段代码的意思是在聊天页面的多选工具栏上增加转发和删除按钮


在转发和删除的方法中可以通过 self.selectedMessages 可以获取已经被选中的消息


删除的话直接删除对应的消息,然后调用 self.allowsMessageCellSelection = NO; 将消息 cell 重置为初始状态


转发的话,可以检查一下消息是否可以转发(比如红包消息,位置消息等不应该被转发,基于用户隐私考虑是否转发语音消息等),然后进入通讯录页面转发给指定的好友


需要注意的是 iOS 端有发送频率限制,最多 5条/秒 ,如果直接 for 循环发送会有部分发送失败,建议是转发过程做个等待,比如 0.3 秒发送一条消息,转发完成之后需要调用 self.allowsMessageCellSelection = NO; 将聊天页面消息 cell 重置为初始状态


SealTalk 默认不允许转发的消息包含以下消息,主要包含了音视频通话,位置共享,红包和语音等消息,开发者可根据自已的业务情况实现需要转发的消息类型

@"RC:VCAccept", @"RC:VCHangup", @"RC:VCInvite", @"RC:VCModifyMedia", @"RC:VCModifyMem", @"RC:VCRinging",@"RC:VCSummary", @"RC:RLStart", @"RC:RLEnd", @"RC:RLJoin", @"RC:RLQuit", @"RCJrmf:RpMsg", @"RC:VcMsg"


以上代码均可以在 SealTalk 源码的 RCDChatViewController.m 中找到