我用的SDK版本pod 'TXIMSDK_TUIKit_iOS', '~> 5.0.10'
第一, pod導(dǎo)入有幾率會導(dǎo)入失敗, 當(dāng)時(shí)沒有想著寫簡書, 但是折騰不很久, 最終解決是因?yàn)?在pod文件中增加了pod 'ISVImageScrollView', '~> 0.1.2'
這是TXIMSDK_TUIKit_iOS中會自動(dòng)引用的一個(gè)庫, 謹(jǐn)記, 導(dǎo)入順序一定是
pod 'TXIMSDK_TUIKit_iOS', '~> 5.0.10'
pod 'ISVImageScrollView', '~> 0.1.2'
第二, 騰訊畢竟是騰訊, 針對自定義消息給開發(fā)者的門檻非常低, 但是.... 有點(diǎn)麻煩!
首先你針對自己的需求, 需要多少種自定義消息就先對應(yīng)創(chuàng)建的Cell和CellData
每一個(gè)Cell和CellData為一組, 負(fù)責(zé)一個(gè)自定義消息控件的賦值, 交互與高度的自適應(yīng), 重點(diǎn)是必須繼承TUIMessageCell和TUIMessageCellData
第三, TUIMessageCell中, 自帶一個(gè)isSelf的屬性, 文檔中說明是用來區(qū)分當(dāng)前發(fā)送的消息是否是自己發(fā)送的, 但是!!! 這個(gè)屬性僅限在當(dāng)前頁面發(fā)送消息時(shí)有用, 當(dāng)你返回到上一個(gè)頁面時(shí), 這個(gè)屬性的值永遠(yuǎn)是false, 所以這個(gè)屬性無法解決某些需要判斷當(dāng)前這條消息是否是自己發(fā)送的需求, 我使用的是messageData.direction, 這個(gè)屬性可以點(diǎn)進(jìn)去看一下, 兩個(gè)類型, 完美解決這個(gè)問題
第四, 自適應(yīng)高度, Oc很多年沒寫了, 這里不做贅述, 但是我相信swift的小伙伴在做UI控件約束的時(shí)候還是習(xí)慣在自定義cell中初始化一個(gè)setupConstraints的方法在這里做約束, 即便是有多行文字的問題, snp僅需要你配置一下最大臨界點(diǎn)即可, 但是騰訊大大這方面我就不太清楚是怎么想的, 也許是Oc與swift之間微妙的不同, 他們采取的方式是在剛才我們自定義消息中初始化的TUIMessageCellData里需要重寫一個(gè)contentSize()的方法, 假設(shè)你有兩個(gè)Label 的字符串是存在多行可能的, 那么你就要在這里計(jì)算這兩個(gè)Label對應(yīng)字符串的高度, 在這里做修改, 然后才能為整個(gè)自定義消息適配高度, 這個(gè)真的坑了我很久, 文檔也沒有說明的很清楚, 所以... 當(dāng)你發(fā)現(xiàn)你自定義的消息在聊天界面無法自適應(yīng)高度的時(shí)候, 回去TUIMessageCellData看看contentSize()方法有沒有重寫, 有沒有賦值
以上四點(diǎn)是本次對接騰訊云get到的一些東西, 分享給大家, 下面我把實(shí)現(xiàn)自定義消息的代碼截圖出來
1, 初始化CustomMessageData, 并繼承TUIMessageCellData
2, 初始化MessageInterviewCell, 并繼承TUIMessageCell
這里的代碼沒什么新鮮的, 跟我們平時(shí)初始化自定義Cell沒什么區(qū)別, 僅僅只是賦值的時(shí)候需要用到騰訊SDK中的fill()方法, 如圖:
3, 視圖控制器中設(shè)置代理,
messageController.delegate = self, 并實(shí)現(xiàn)兩個(gè)方法, 我暫時(shí)沒有做封裝, 但這樣看起來最直觀
4, 配置自定義消息的數(shù)據(jù), 最終調(diào)用sendMessage()方法發(fā)送消息即可
其中有兩個(gè)方法是我封裝過的, 一個(gè)是THeaderManage.dictionaryJsonData(), 這個(gè)就是字典轉(zhuǎn)Data的方法, 百度即可, 另一個(gè)是:
這個(gè)在騰訊的文檔中有, 如果需要可以留言給我, 有問必回, 不喜勿噴, 謝謝