一、微信消息界面的结构
1.1 消息对应的Cell
微信消息界面对应的类名为:BaseMsgContentViewController,消息界面是采用TableView实现的,每种消息类型对应一种Cell。
文本消息:TextMessageCellView
图片消息:ImageMessageCellView
语音消息:VoiceMessageCellView
位置消息:LocationMessageView
红包消息:WCPayC2CMessageView
名片消息:ShareCardMessageCellView
链接消息:AppUrlMessageCellView
消息发送时间:ChatTimeCellView
下图为文本消息cell的结构图 :
1.2 消息对应的Model
同样的,每种消息对应的Model也是不同的,每种消息对应一种model。
文本消息:TextMessageViewModel
图片消息:ImageMessageViewModel
语音消息:VoiceMessageViewModel
位置消息:LocationMessageViewModel
红包消息:WCPayC2CMessageViewModel
名片消息:ShareCardMessageViewModel
链接消息:AppUrlMessageViewModel
消息发送时间:ChatTimeViewModel
这几种消息model都继承于BaseMessageViewModel,而BaseMessageViewModel的父类为: BaseChatViewModel。我们来看下BaseChatViewModel里面有哪些有用的信息:
@interface BaseMessageViewModel : BaseChatViewModel <IMessageNodeStatusExt>
{
CBaseContact *m_contact;
CMessageWrap *m_messageWrap;
struct CGSize m_contentViewSize;
long long m_orientation;
NSString *m_cpKeyForChatRoomMessage;
NSString *m_cpKeyForChatRoomDisplayName;
_Bool m_isChatRoomMessageUnsafe;
_Bool m_isChatRoomDisplayNameUnsafe;
_Bool m_isSender;
_Bool _isShowStatusView;
_Bool _highlighted;
}
这里面有一个非常有用的对象CMessageWrap,这个对象封装了与消息有关的一些属性,我们再去探究一下CMessageWrap的头文件里面有些什么可用的信息,以下只例举几个常用的属性:
@interface CMessageWrap : MMObject
{
NSString *m_nsFromUsr; //发送人
NSString *m_nsToUsr; //接收人
unsigned int m_uiMessageType; //消息类型
NSString *m_nsContent; //消息内容
......
}