環(huán)信 - 進階篇之自定義cell(二)??
更新:(1)縮略圖寬度不夠導致定制cell內(nèi)控件擠壓 -2017.06.29
現(xiàn)在的即時通訊,普通的聊天越來越難以滿足變態(tài)的需求了,這里加個按鈕、這里加個時間、那里加個禁言、那里加個匿名私聊......
今天就給大家介紹下怎么對cell中的各種需求的定制處理
大家覺得滿意的請點個????
例:我就拿之前幫人解決的一個案例來講解方法及實現(xiàn),大家可以借鑒處理的過程及思路,如有不妥之處,請大家及時留言告知,謝謝。
類型一:在現(xiàn)有會話cell上修改UI效果
類似于上面給出的截圖,我們有時候需要對環(huán)信官方給出的cell進行些許的調(diào)整。例如:項目中加入了不同于普通群聊或者聊天室的功能需求
點擊話題聊天,大家加入聊天室,這里發(fā)出的各種就是不同于普通聊天,普通的聊天只需展示文字、地址、圖片等等,但是這里的需求是得加上時間、私聊按鈕,沒砍需求之前是還有點贊和取消贊的按鈕。
我們在普通聊天的基礎上新建幾個cell,文字、語音、圖片、地圖等等,不能和原有的普通cell混合起來,因為需求有普通聊天。
直接把普通聊天cell中的代碼拷貝過來,再在此基礎上進行cell的UI自定義處理,就拿文字聊天時的處理情況為例:
1、拷貝復制原有普通聊天cell內(nèi)的代碼
2、把需要的新增的UI控件初始化
3、適配各類控件
4、傳值及賦值
5、新增按鈕點擊和本身cell的點擊效果處理(別和cell上的點擊效果混到一起)
6、耐心調(diào)整cell上UI效果
以上基本就是簡單的自定義cell步驟了,有基礎的小伙伴看下步驟應該就有思路了
類型二:類似于紅包和名片Cell的UI效果
通常在我們項目中,并不只有文字、圖片等等這些簡單的聊天內(nèi)容,有時候我們需要把自己的信息作為一張名片發(fā)給對方、發(fā)個紅包給好朋友、發(fā)一個項目中的一個模塊介紹給對方等等功能要求。
我們就拿雷哥的這張假名片為例:????????????????????????
/*!
@method
@brief 新增一個新的功能按鈕
@discussion
@param image 按鈕圖片
@param highLightedImage 高亮圖片
@param title 按鈕標題
@result
*/
- (void)insertItemWithImage:(UIImage*)image
highlightedImage:(UIImage*)highLightedImage
title:(NSString*)title;
/*!
@method
@brief 修改功能按鈕圖片
@discussion
@param image 按鈕圖片
@param highLightedImage 高亮圖片
@param title 按鈕標題
@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;
因為我們不好去修改環(huán)信的會話類型
*? 消息體類型
typedef enum{
EMMessageBodyTypeText? = 1,? ? /*! \~chinese 文本類型 \~english Text */
EMMessageBodyTypeImage,? ? ? ? /*! \~chinese 圖片類型 \~english Image */
EMMessageBodyTypeVideo,? ? ? ? /*! \~chinese 視頻類型 \~english Video */
EMMessageBodyTypeLocation,? ? ? /*! \~chinese 位置類型 \~english Location */
EMMessageBodyTypeVoice,? ? ? ? /*! \~chinese 語音類型 \~english Voice */
EMMessageBodyTypeFile,? ? ? ? ? /*! \~chinese 文件類型 \~english File */
EMMessageBodyTypeCmd,? ? ? ? ? /*! \~chinese 命令類型 \~english Command */
}EMMessageBodyType;
如果環(huán)信把這個開放出來,或許我們就更加簡單了我們只需自己修改成自己對應的類型即可。但是這個目前就想想,所以我們可以在以上類型中找一個出來,在它的基礎上做些文章,變成我們想要的類型。
紅包和名片最像什么。。。。對,不就和圖片差不多嘛,不過小伙伴也不要以為只能拿圖片來做文章,其他的我們都可以拿來用,這里就拿文字類型來作為例子(原理都一樣)。
這里我們只簡要介紹怎么根據(jù)會話類型來顯示名片,具體傳值等怎么做,有基礎的小伙伴應該都懂,不懂的小伙伴見文章底部。
1、我們需要在發(fā)送名片時,在拓展消息里面存一個名片的字段,這個字段可以被用來判斷是名片、紅包等等。
2、名片、紅包等等中內(nèi)容,同樣也存在拓展屬性中(這里不做過多介紹)
3、我們在展示自己的消息和接收到對方的消息時,在文字類型的基礎上再進一步判斷是什么類型,加載對應類型的視圖,如果是紅包就加載紅包的view,如果是名片就展示名片view......
好了,以上就是我們所要介紹的兩種不同類型cell的處理辦法。
以下是補充自定義cell時遇到的各種情況及處理:
1、cell上語音、圖片等原始點擊和新增按鈕點擊沖突處理:
注釋掉原有的點擊方法,把原有的點擊方法放到具體的控件上去,避免cell上多個控件點擊的沖突
重點:記得把氣泡上的點擊權限打開
_backgroundImageView.userInteractionEnabled = YES;
2、cell上語音氣泡長度的改變,避免過段影響布局
我們只需把原有語音上的語音長度Label距語音圖片控件調(diào)大一點距離就能自動把語音類氣泡拉長。(其他類型一樣處理原理)
3、因新增控件導致在原有cell上高度的變化處理
/*! @method @brief 根據(jù)消息的內(nèi)容,獲取當前cell的高度 @discussion @param model? ? ? ? 消息對象model @result 返回cell高度 */
+ (CGFloat)cellHeightWithModel:(id)model
在原cell高度處理的情況下,根據(jù)各種類型的判斷進行cell高度的自適應。
4、文字類型氣泡長度的處理
我暫時的處理方法:判斷輸入的文字長度,加入文字長度小于10,我會在后面自動補全5個空格,被動撐長氣泡的長度。
假如小伙伴們有更好的建議也可以留言
5、縮略圖寬度不夠導致定制cell內(nèi)控件擠壓
全局搜索kEMMessageImageSizeHeight這個字段,修改寬度即可。
6、。。。。。。
暫時沒有想到要公布出的處理方法,如果小伙伴們有遇到的問題,可以及時在下方留言,如果我遇到過并處理過的會及時更新處理方法,謝謝大家。
如果大家伙有自己的處理方法及見解也可以提出來,我會收錄下來并且著名出自來源。
(1)iOS 環(huán)信(3.1.5)快速集成單聊、群聊、視頻及語音通話-新手
(2)iOS 環(huán)信昵稱、頭像、群頭像、群名稱處理
(3)購物車的邏輯及處理
? 、、、、、、、、、、、、、、、、、、、
有問題或者不理解的可以找我 ------ qq:1804094055?