TUIChatControllerDelegate Protocol Reference

Conforms to NSObject
Declared in TUIChatController.h

Overview

TUIChatControllerDelegate 协议 此协议旨在帮助开发者根据自身需求实现自定义消息。 自定义消息的的具体实现方法,请参照链接 https://github.com/tencentyun/TIMSDK/wiki/TUIKit-iOS%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B6%88%E6%81%AF

– chatController:onNewMessage: required method

接收新消息时的回调,用于甄别自定义消息

- (TUIMessageCellData *)chatController:(TUIChatController *)controller onNewMessage:(TIMMessage *)msg

Parameters

controller

委托者,当前聊天控制器。

msg

接收到的新消息,在此回调中,特指包含您自定义消息类型的消息元素。

Return Value

返回一个消息单元数据源,此数据源为您自定义的消息数据源,继承自 TUIMessageCellData。当接收到的消息不是您的自定义消息时,您可以返回 nil。

Discussion

每条新消息在进入气泡展示区之前,都会通过 onNewMessage() 通知给您的代码。 - 如果您返回 nil,TUIChatController 会认为该条消息非自定义消息,会将其按照普通消息的处理流程进行处理。 - 如果您返回一个 TUIMessageCellData 类型的对象,TUIChatController 会在随后触发的 onShowMessageData() 回调里传入您返回的 cellData 对象。

也就是说,onNewMessage() 负责让您甄别自己的个性化消息,而 onShowMessageData() 回调则负责让您展示这条个性化消息。

- ([TUIMessageCellData](../Classes/TUIMessageCellData.html) *)chatController:([TUIChatController](../Classes/TUIChatController.html) *)controller onNewMessage:(TIMMessage *)msg
{
TIMElem *elem = [msg getElem:0];
//判断是否为自定义元素。
if([elem isKindOfClass:[TIMCustomElem class]]){
MyCustomCellData *cellData = [[MyCustomCellData alloc] initWithDirection:msg.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming];

//MyCustomCellData 是您自定义的消息类型,假设它包含 text 和 link 两个字段
//此处省略从 elem 解析出自定义数据的代码段

cellData.text = @"这是我的自定义消息";
cellData.link = @"www.qq.com";
return cellData;
}
return nil;
}

Declared In

TUIChatController.h

– chatController:onShowMessageData: required method

展示自定义个性化消息

- (TUIMessageCell *)chatController:(TUIChatController *)controller onShowMessageData:(TUIMessageCellData *)cellData

Parameters

controller

委托者,当前聊天控制器。

cellData

即将显示的消息单元的数据源,在此回调中,特指您自定义的消息数据源。

Return Value

返回一个即将显示的消息单元,此消息单元为您自定义的消息单元,继承自 TUIMessageCell。当接收到的消息不是您的自定义消息时,您可以返回空。

Discussion

您可以通过重载 onShowMessageData() 改变消息气泡的默认展示逻辑,只需要返回一个自定义的 TUIMessageCell 对象即可。

- ([TUIMessageCell](../Classes/TUIMessageCell.html) *)chatController:([TUIChatController](../Classes/TUIChatController.html) *)controller onShowMessageData:([TUIMessageCellData](../Classes/TUIMessageCellData.html) *)data
{
//判定当前传入数据源是否为自定义消息的数据源
if ([data isKindOfClass:[MyCustomCellData class]]) {
MyCustomCell *myCell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
[myCell fillWithData:(MyCustomCellData *)data];
return myCell;
}
return nil;
}

在上述代码中,当我们判定待显示的数据源为自定义数据源时,我们便实例化 MyCustomCell,并通过传入的 data 进行初始化,并将 MyCustomCell 作为返回值返回。 当我们判断传入的数据并非自定义数据源时,我们可以返回 nil。 需要注意的是,在此处的 MyCustomCell 在此处略过了具体的声明与实现。如果您对自定义消息单元的声明与实现有疑问的话,请参考本协议声明时,注释中给出的链接。

Declared In

TUIChatController.h

– chatController:onSelectMoreCell: required method

点击某一“更多”单元的回调委托。 当您点击某一“更多”单元后回执行该回调,您可以通过该回调实现对“更多”视图的定制。 比如您在更多视图4个单元的基础上,添加了一个名为 myMoreCell 的第5个单元,则您可以按下列代码实现该自定义单元的响应回调。

- (void)chatController:([TUIChatController](../Classes/TUIChatController.html) *)chatController onSelectMoreCell:([TUIInputMoreCell](../Classes/TUIInputMoreCell.html) *)cell{
if ([cell.data.title isEqualToString:@"myMoreCell"]) {
//Do something
}
}
- (void)chatController:(TUIChatController *)chatController onSelectMoreCell:(TUIInputMoreCell *)cell

Parameters

chatController

委托者,当前聊天控制器。

cell

被点击的“更多”单元,在此回调中特指您自定义的“更多”单元。

Declared In

TUIChatController.h

– chatController:onSelectMessageAvatar: required method

点击消息头像回调 默认点击头像是打开联系人资料页,如果您实现了此方法,则内部不做任何处理

- (void)chatController:(TUIChatController *)controller onSelectMessageAvatar:(TUIMessageCell *)cell

Parameters

controller

会话对象

cell

所点击的消息单元

Declared In

TUIChatController.h

– chatController:onSelectMessageContent: required method

点击消息内容回调

- (void)chatController:(TUIChatController *)controller onSelectMessageContent:(TUIMessageCell *)cell

Parameters

controller

会话对象

cell

所点击的消息单元

Declared In

TUIChatController.h