環(huán)信 - 進(jìn)階篇之自定義cell(二)??
更新:(1)縮略圖寬度不夠?qū)е露ㄖ芻ell內(nèi)控件擠壓 -2017.06.29
現(xiàn)在的即時(shí)通訊,普通的聊天越來(lái)越難以滿足變態(tài)的需求了,這里加個(gè)按鈕、這里加個(gè)時(shí)間、那里加個(gè)禁言、那里加個(gè)匿名私聊......
今天就給大家介紹下怎么對(duì)cell中的各種需求的定制處理
大家覺得滿意的請(qǐng)點(diǎn)個(gè)????
例:我就拿之前幫人解決的一個(gè)案例來(lái)講解方法及實(shí)現(xiàn),大家可以借鑒處理的過程及思路,如有不妥之處,請(qǐng)大家及時(shí)留言告知,謝謝。

類型一:在現(xiàn)有會(huì)話cell上修改UI效果
類似于上面給出的截圖,我們有時(shí)候需要對(duì)環(huán)信官方給出的cell進(jìn)行些許的調(diào)整。例如:項(xiàng)目中加入了不同于普通群聊或者聊天室的功能需求

點(diǎn)擊話題聊天,大家加入聊天室,這里發(fā)出的各種就是不同于普通聊天,普通的聊天只需展示文字、地址、圖片等等,但是這里的需求是得加上時(shí)間、私聊按鈕,沒砍需求之前是還有點(diǎn)贊和取消贊的按鈕。

我們?cè)谄胀奶斓幕A(chǔ)上新建幾個(gè)cell,文字、語(yǔ)音、圖片、地圖等等,不能和原有的普通cell混合起來(lái),因?yàn)樾枨笥衅胀奶臁?/p>


直接把普通聊天cell中的代碼拷貝過來(lái),再在此基礎(chǔ)上進(jìn)行cell的UI自定義處理,就拿文字聊天時(shí)的處理情況為例:
1、拷貝復(fù)制原有普通聊天cell內(nèi)的代碼
2、把需要的新增的UI控件初始化
3、適配各類控件
4、傳值及賦值
5、新增按鈕點(diǎn)擊和本身cell的點(diǎn)擊效果處理(別和cell上的點(diǎn)擊效果混到一起)
6、耐心調(diào)整cell上UI效果
以上基本就是簡(jiǎn)單的自定義cell步驟了,有基礎(chǔ)的小伙伴看下步驟應(yīng)該就有思路了
類型二:類似于紅包和名片Cell的UI效果
通常在我們項(xiàng)目中,并不只有文字、圖片等等這些簡(jiǎn)單的聊天內(nèi)容,有時(shí)候我們需要把自己的信息作為一張名片發(fā)給對(duì)方、發(fā)個(gè)紅包給好朋友、發(fā)一個(gè)項(xiàng)目中的一個(gè)模塊介紹給對(duì)方等等功能要求。

我們就拿雷哥的這張假名片為例:????????????????????????
/*!
@method
@brief 新增一個(gè)新的功能按鈕
@discussion
@param image 按鈕圖片
@param highLightedImage 高亮圖片
@param title 按鈕標(biāo)題
@result
*/
- (void)insertItemWithImage:(UIImage*)image
highlightedImage:(UIImage*)highLightedImage
title:(NSString*)title;
/*!
@method
@brief 修改功能按鈕圖片
@discussion
@param image 按鈕圖片
@param highLightedImage 高亮圖片
@param title 按鈕標(biāo)題
@param index 按鈕索引
@result
*/
- (void)updateItemWithImage:(UIImage*)image
highlightedImage:(UIImage*)highLightedImage
title:(NSString*)title
atIndex:(NSInteger)index;
/*!
@method
@brief 根據(jù)索引刪除功能按鈕
@discussion
@param index 按鈕索引
@result
*/
- (void)removeItematIndex:(NSInteger)index;

因?yàn)槲覀儾缓萌バ薷沫h(huán)信的會(huì)話類型
*? 消息體類型
typedef enum{
EMMessageBodyTypeText? = 1,? ? /*! \~chinese 文本類型 \~english Text */
EMMessageBodyTypeImage,? ? ? ? /*! \~chinese 圖片類型 \~english Image */
EMMessageBodyTypeVideo,? ? ? ? /*! \~chinese 視頻類型 \~english Video */
EMMessageBodyTypeLocation,? ? ? /*! \~chinese 位置類型 \~english Location */
EMMessageBodyTypeVoice,? ? ? ? /*! \~chinese 語(yǔ)音類型 \~english Voice */
EMMessageBodyTypeFile,? ? ? ? ? /*! \~chinese 文件類型 \~english File */
EMMessageBodyTypeCmd,? ? ? ? ? /*! \~chinese 命令類型 \~english Command */
}EMMessageBodyType;
如果環(huán)信把這個(gè)開放出來(lái),或許我們就更加簡(jiǎn)單了我們只需自己修改成自己對(duì)應(yīng)的類型即可。但是這個(gè)目前就想想,所以我們可以在以上類型中找一個(gè)出來(lái),在它的基礎(chǔ)上做些文章,變成我們想要的類型。
紅包和名片最像什么。。。。對(duì),不就和圖片差不多嘛,不過小伙伴也不要以為只能拿圖片來(lái)做文章,其他的我們都可以拿來(lái)用,這里就拿文字類型來(lái)作為例子(原理都一樣)。

這里我們只簡(jiǎn)要介紹怎么根據(jù)會(huì)話類型來(lái)顯示名片,具體傳值等怎么做,有基礎(chǔ)的小伙伴應(yīng)該都懂,不懂的小伙伴見文章底部。
1、我們需要在發(fā)送名片時(shí),在拓展消息里面存一個(gè)名片的字段,這個(gè)字段可以被用來(lái)判斷是名片、紅包等等。
2、名片、紅包等等中內(nèi)容,同樣也存在拓展屬性中(這里不做過多介紹)
3、我們?cè)谡故咀约旱南⒑徒邮盏綄?duì)方的消息時(shí),在文字類型的基礎(chǔ)上再進(jìn)一步判斷是什么類型,加載對(duì)應(yīng)類型的視圖,如果是紅包就加載紅包的view,如果是名片就展示名片view......

好了,以上就是我們所要介紹的兩種不同類型cell的處理辦法。
以下是補(bǔ)充自定義cell時(shí)遇到的各種情況及處理:
1、cell上語(yǔ)音、圖片等原始點(diǎn)擊和新增按鈕點(diǎn)擊沖突處理:
注釋掉原有的點(diǎn)擊方法,把原有的點(diǎn)擊方法放到具體的控件上去,避免cell上多個(gè)控件點(diǎn)擊的沖突
重點(diǎn):記得把氣泡上的點(diǎn)擊權(quán)限打開
_backgroundImageView.userInteractionEnabled = YES;

2、cell上語(yǔ)音氣泡長(zhǎng)度的改變,避免過段影響布局
我們只需把原有語(yǔ)音上的語(yǔ)音長(zhǎng)度Label距語(yǔ)音圖片控件調(diào)大一點(diǎn)距離就能自動(dòng)把語(yǔ)音類氣泡拉長(zhǎng)。(其他類型一樣處理原理)

3、因新增控件導(dǎo)致在原有cell上高度的變化處理
/*! @method @brief 根據(jù)消息的內(nèi)容,獲取當(dāng)前cell的高度 @discussion @param model? ? ? ? 消息對(duì)象model @result 返回cell高度 */
+ (CGFloat)cellHeightWithModel:(id)model
在原cell高度處理的情況下,根據(jù)各種類型的判斷進(jìn)行cell高度的自適應(yīng)。

4、文字類型氣泡長(zhǎng)度的處理
我暫時(shí)的處理方法:判斷輸入的文字長(zhǎng)度,加入文字長(zhǎng)度小于10,我會(huì)在后面自動(dòng)補(bǔ)全5個(gè)空格,被動(dòng)撐長(zhǎng)氣泡的長(zhǎng)度。
假如小伙伴們有更好的建議也可以留言
5、縮略圖寬度不夠?qū)е露ㄖ芻ell內(nèi)控件擠壓
全局搜索kEMMessageImageSizeHeight這個(gè)字段,修改寬度即可。

6、。。。。。。
暫時(shí)沒有想到要公布出的處理方法,如果小伙伴們有遇到的問題,可以及時(shí)在下方留言,如果我遇到過并處理過的會(huì)及時(shí)更新處理方法,謝謝大家。
如果大家伙有自己的處理方法及見解也可以提出來(lái),我會(huì)收錄下來(lái)并且著名出自來(lái)源。
(1)iOS 環(huán)信(3.1.5)快速集成單聊、群聊、視頻及語(yǔ)音通話-新手
(2)iOS 環(huán)信昵稱、頭像、群頭像、群名稱處理
(4)iOS 下拉上劃導(dǎo)航欄變化處理詳解 + 頭視圖放大
(5)購(gòu)物首頁(yè)類型界面原理及實(shí)現(xiàn) - 初稿
? 、、、、、、、、、、、、、、、、、、、
有問題或者不理解的可以找我 ------ qq:1804094055?
