CDChatList

Github.com

gif1.GIF

gif2.GIF

高性能的聊天頁(yè)面解決方案
對(duì)聊天列表的高度封裝搂根,可靈活配置頁(yè)面樣式

聊天界面其實(shí)大同小異表窘,所以這里封裝了一個(gè)聊天的組件,使用CoreText和手動(dòng)代碼布局,盡量實(shí)現(xiàn)簡(jiǎn)單,通用荐健,高效,易于維護(hù)琳袄。

項(xiàng)目結(jié)構(gòu)

CDChatListView: UITableView 視圖江场,聊天頁(yè)面主體

CDBaseMsgCell: 實(shí)現(xiàn)消息氣泡基本視圖

CDTextTableViewCell、CDImageTableViewCell窖逗、CDAudioTableViewCell: 繼承自CDBaseMsgCell址否,實(shí)現(xiàn)響應(yīng)功能。

CDSystemTableViewCell: 特殊消息氣泡滑负,實(shí)現(xiàn)系統(tǒng)通知

CellCaculator: tableview布局計(jì)算在张,并提前渲染cell

ChatConfiguration: chatlist配置類組用含,UI定制矮慕,及資源等

子組件

CDLabel: 富文本標(biāo)簽

CDChatInputBox: 輸入框封裝組件

安裝

支持至iOS 11

pod 'CDChatList'

使用

配置 CDChatList

ChatHelpr負(fù)責(zé)ChatHelpr的UI配置,及組件的資源文件設(shè)置

UI配置及資源文件都有默認(rèn)啄骇,所以無(wú)需自定義的話痴鳄,就可以跳過(guò)組件的配置

添加 CDChatList 視圖

CDChatListView *list = [[CDChatListView alloc] initWithFrame:self.view.bounds];
list.msgDelegate = self;
self.listView = list;
[self.view addSubview:self.listView];

CDChatList會(huì)將視圖控制器automaticallyAdjustsScrollViewInsets及contentInsetAdjustmentBehavior設(shè)為NO及Never,并適應(yīng)導(dǎo)航欄高度

消息模型 MessageModalProtocal

可以使用自己的消息模型缸夹,消息模型需遵守MessageModalProtocal痪寻,實(shí)現(xiàn)相關(guān)屬性

組件事件 ChatListProtocol

從組件發(fā)出的消息

消息列表請(qǐng)求加載更多消息

-(void)chatlistLoadMoreMsg: (CDChatMessage)topMessage
callback: (void(^)(CDChatMessageArray))finnished;

消息中的點(diǎn)擊事件

-(void)chatlistClickMsgEvent: (ChatListInfo *)listInfo;

向組件發(fā)消息

添加新的數(shù)據(jù)到底部

-(void)addMessagesToBottom: (CDChatMessageArray)newBottomMsgArr;

更新數(shù)據(jù)源中的某條消息模型(主要是為了更新UI上的消息狀態(tài))

-(void)updateMessage:(CDChatMessage)message;

使用場(chǎng)景

收/發(fā)消息

// 發(fā)
{
    MessageModal *modal;
}
-(void)send{
    modal = [[MessageModal alloc] init];
    modal.msgState = CDMessageStateSending;
    modal.createTime = ...;
    modal.msg = ...;
    modal.msgType = ...;
    [chatList addMessagesToBottom: modal];
}

-(void)sendCallBack:(BOOL)isSuccess{
    modal.msgState = isSuccess;  // 此處應(yīng)處理成枚舉
    [chatList updateMessage: modal];
}



// 收
-(void)receivedNewMessage:(MessageModal *)modal{
    [chatList addMessagesToBottom: modal];
}

下拉加載更多消息

消息列表被下拉時(shí),觸發(fā)此回調(diào)

-(void)chatlistLoadMoreMsg: (CDChatMessage)topMessage
callback: (void(^)(CDChatMessageArray))finnished
{
    // 根據(jù)topMessage 獲取更多消息
    NSArray *msgArr = [self getMoreMessageFrom: topMessage amount: 10];
    callback(msgArr);
}

消息點(diǎn)擊事件

目前消息體重處理了 文本點(diǎn)擊 及 圖片點(diǎn)擊 事件

-(void)chatlistClickMsgEvent: (ChatListInfo *)listInfo{
    if (listInfo.eventType == ChatClickEventTypeTEXT){
        // 點(diǎn)擊的文本
        listInfo.clickedText
        // 點(diǎn)擊的文字位置  防止有相同的可點(diǎn)擊文字
        listInfo.range
        // 被點(diǎn)擊文本的隱藏信息   e.g.  <a title="轉(zhuǎn)人工" href="doTransfer">
        listInfo.clickedTextContent
    } else if (listInfo.eventType == ChatClickEventTypeIMAGE){
        // 圖片
        listInfo.image
        // 圖片在tableview中的位置
        listInfo.msgImageRectInTableView
    }
}

TODO

  • 自定義消息內(nèi)容匹配
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虽惭,一起剝皮案震驚了整個(gè)濱河市橡类,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芽唇,老刑警劉巖顾画,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件取劫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡研侣,警方通過(guò)查閱死者的電腦和手機(jī)谱邪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庶诡,“玉大人惦银,你說(shuō)我怎么就攤上這事∧┦模” “怎么了扯俱?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)喇澡。 經(jīng)常有香客問(wèn)我蘸吓,道長(zhǎng),這世上最難降的妖魔是什么撩幽? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任库继,我火速辦了婚禮,結(jié)果婚禮上窜醉,老公的妹妹穿的比我還像新娘宪萄。我一直安慰自己,他們只是感情好榨惰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布拜英。 她就那樣靜靜地躺著,像睡著了一般琅催。 火紅的嫁衣襯著肌膚如雪居凶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天藤抡,我揣著相機(jī)與錄音侠碧,去河邊找鬼。 笑死缠黍,一個(gè)胖子當(dāng)著我的面吹牛弄兜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓷式,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼替饿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贸典?” 一聲冷哼從身側(cè)響起视卢,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廊驼,沒(méi)想到半個(gè)月后据过,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颊埃,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蝶俱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了班利。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榨呆,死狀恐怖罗标,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情积蜻,我是刑警寧澤闯割,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站竿拆,受9級(jí)特大地震影響宙拉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丙笋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一谢澈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧御板,春花似錦锥忿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至笙各,卻和暖如春钉答,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杈抢。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工数尿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人春感。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓砌创,卻偏偏與公主長(zhǎng)得像虏缸,于是被迫代替她去往敵國(guó)和親鲫懒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)刽辙、插件窥岩、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 帶點(diǎn)鴨脖花生米麻辣燙小龍蝦小丸子炸雞排手抓餅兩瓶可樂(lè)鹽酥雞東坡肘子醬牛肉糖醋排骨紅燒肉水煮肉片水煮魚番茄牛腩炸雞腿...
    李欣悅1996L閱讀 114評(píng)論 0 0
  • 文/安安安小軟 圖/冷飲 . . . <本期完> 飼養(yǎng)員Saying ▼ 夏周一在商場(chǎng)摸爬滾打多年 終于因?yàn)?妨礙...
    全民備胎夏周一閱讀 166評(píng)論 0 0
  • 特蕾莎是個(gè)生活在遙遠(yuǎn)西部北方的鄉(xiāng)村姑娘颂翼。她時(shí)常感到孤獨(dú)晃洒,她的孤獨(dú)隱藏在內(nèi)心深處,無(wú)人碰及朦乏。她喜歡對(duì)著天空發(fā)呆球及,然后...
    S簡(jiǎn)閱讀 715評(píng)論 0 0