iOS 實現(xiàn)微信朋友圈評論回復功能(二)

一股耽、概述
  • iOS開發(fā)中颜曾,相信許多開發(fā)者都遇到過,類似于像微信朋友圈的評論回復功能的開發(fā)缸血,難點莫過于 Cell里面的子控件布局 蜀铲、 點擊事件的回調(diào)評論回復的邏輯處理
  • 筆者將通過 兩種方法來實現(xiàn)微信朋友圈評論回復功能属百,也將通過一個仿優(yōu)酷視頻評論和回復的Demo 來實戰(zhàn)一番记劝,本文將通過利用UITableViewCell嵌套UITableView來實現(xiàn),希望能為廣大開發(fā)提供一點思路族扰,少走一些彎路厌丑,填補一些細坑。
  • iOS實現(xiàn)微信朋友圈評論回復功能(一)
  • iOS 實現(xiàn)優(yōu)酷視頻的評論回復功能
二渔呵、效果圖
效果圖.gif
三怒竿、利用UITableViewCell嵌套UITableView來實現(xiàn)
1. 頁面分析
Cell嵌套tableView@2x.png
2. 技術(shù)分析
  • 列表展示數(shù)據(jù)流

    • 列表通常利用tableView來實現(xiàn)。
    • tableview實現(xiàn)又分為自動布局絕對布局(即Frame布局
      自動布局:個人推薦利用Masonry+UITableView-FDTemplateLayoutCell的方案來實現(xiàn)自動布局扩氢。
      Frame布局: 事先計算出Cell子控件的Frame以及Cell的高度耕驰,存入ModelFrame里面,雖然計算稍微復雜录豺,但是性能好朦肘,可控性強,易動畫双饥,擴展維護成本低媒抠。
      兩種布局方式不是本文的重點,依舊個人喜好咏花,筆者偏好是Frame布局趴生,本文案例也將采用這種方式。
  • Cell里面的昵稱支持點擊跳轉(zhuǎn)用戶信息

    • 首先明確內(nèi)容支持 attributedString(富文本)而不是text(普通文本)
    • 可以使用 UILabelattributedText苍匆,或者采用第三方框架TYAttributedLabelYYText刘急,筆者在此采用的是YYText
  • Cell里面嵌套tableView

    • UITableView也是繼承UIView浸踩,可以拿他當做普通的View來使用叔汁,無非要設(shè)置tableView.delegate = selftableView.dataSource = self并實現(xiàn)其代理數(shù)據(jù)源方法即可。
    • 需要設(shè)置嵌套的tableView.scrollEnable = NO民轴,讓其不可滾動。
4. 技術(shù)難點
  • Frame布局計算復雜
    1. 實際項目中球订,我們從服務(wù)器獲取的數(shù)據(jù)后裸,轉(zhuǎn)換為數(shù)據(jù)模型(Model),對應(yīng)的數(shù)據(jù)有些不能直接顯示在視圖(View)上,需要二次處理冒滩。tableviewCell高度計算微驶,是tableView使用以及優(yōu)化的重點對象,最好的方式莫過于高度緩存,筆者這里為每個模型(Model)配備一個模型尺寸(ModelFrame)开睡,主要用來計算tableViewCell的高度(cellHeight)因苹,以及子控件的尺寸(frame),而且保證模型(Model)的純凈性以及減少胖模型的生成篇恒。
    2. ModelFrame模型持有Model扶檐,并開放cell中各個子控件的Frame屬性,,以及cellHeight緩存cell高度胁艰。注意:這里屬性應(yīng)該設(shè)置為readonly來修飾更為合理款筑。
    3. 重寫ModelFrameModelsetter方法,計算tabelViewCell子控件的Frame以及緩存cell的高度cellHeight腾么。
    4. tableViewCell自身持有各自ModelFrame模型奈梳,在tableView的數(shù)據(jù)源給tableViewCellCell時,確定tabelViewCell的子控件的布局(Frame)以及數(shù)據(jù)解虱。
  • Cell的事件傳遞的復雜性
    其中評論用戶信息點擊攘须,評論cell點擊采用的是代理嵌套代理的方式實現(xiàn)。應(yīng)為這兩個事件是在嵌套tableview評論taleview)的cell上殴泰,中間有個嵌套關(guān)系于宙,暫時沒有找到方法,可以減少這一層嵌套悍汛。個人認為限煞,兩層代理嵌套,是可接受的员凝,并不會太混亂署驻,如有更好的方式,請在評論區(qū)回復。詳情事件處理請查看文章下方給出的Demo地址旺上。
cell嵌套tableView的事件傳遞@2x.png
四瓶蚂、技術(shù)難點
  1. 設(shè)置文本的額外區(qū)域,防止文字過少宣吱,用戶無法點中文本的bug窃这。
    Label的額外區(qū)域@2x.png
  // 文本
  YYLabel *contentLabel = [[YYLabel alloc] init];

  // 設(shè)置文本的額外區(qū)域,修復用戶點擊文本沒有效果
  UIEdgeInsets textContainerInset = contentLabel.textContainerInset;
  textContainerInset.top = MHVideoTopicVerticalSpace;
  textContainerInset.bottom = MHVideoTopicVerticalSpace;
  contentLabel.textContainerInset = textContainerInset;
  
  contentLabel.numberOfLines = 0 ;
  contentLabel.textAlignment = NSTextAlignmentLeft;
  [self.contentView addSubview:contentLabel];
  1. 點擊評論昵稱獲取用戶模型(MHUser
  • 點擊評論昵稱征候,在評論模型(MHComment)中通過通知傳遞用戶模型(MHUser)杭攻。雖獲取用戶模型(MHUser)簡單,但使用通知會增加項目的耦合性疤坝。
// 文本高亮模型
      YYTextHighlight *toUserHighlight = [YYTextHighlight highlightWithBackgroundColor:[UIColor colorWithWhite:0.000 alpha:0.220]];
      // 這里痛過屬性的userInfo保存User模型兆解,后期通過獲取模型然后獲取User模型
      toUserHighlight.userInfo = @{MHCommentUserKey:self.toUser};
      
      // 點擊用戶的昵稱的事件傳遞
//        toUserHighlight.tapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect)
//        {
//            // 這里通過通知把用戶的模型傳遞出去
//        };
  • 點擊評論昵稱,通過label的點擊事件來獲取跑揉,由于YYLablehighlightTapAction的事件锅睛,無法獲取YYTextHighlight模型,但是通過KVC可以獲取到YYTextHighlight模型历谍,從而得到textHighlight.userInfo现拒。這樣一來通過delegate就可將用戶模型(MHUser)傳遞出去。
__weak typeof(self) weakSelf = self;
    contentLabel.highlightTapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {
        
        // 利用KVC獲取UserInfo 其實可以在MHComment模型里面利用 通知告知控制器哪個用戶被點擊了
        YYTextHighlight *highlight = [containerView valueForKeyPath:@"_highlight"];
        
        if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(commentCell:didClickedUser:)]) {
            [weakSelf.delegate commentCell:weakSelf didClickedUser:highlight.userInfo[MHCommentUserKey]];
        }       
    };
五望侈、期待
  1. 文章若對您有點幫助印蔬,請給個喜歡??,畢竟碼字不易脱衙;若對您沒啥幫助扛点,請給點建議??,切記學無止境岂丘。
  2. 針對文章所述內(nèi)容陵究,閱讀期間任何疑問;請在文章底部評論指出奥帘,我會火速解決和修正問題铜邮。
  3. GitHub地址:https://github.com/CoderMikeHe
六、代碼

MHDevelopExample_Objective_C - MHTopicTwoController.h/m

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寨蹋,一起剝皮案震驚了整個濱河市松蒜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌已旧,老刑警劉巖秸苗,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異运褪,居然都是意外死亡惊楼,警方通過查閱死者的電腦和手機玖瘸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來檀咙,“玉大人雅倒,你說我怎么就攤上這事』】桑” “怎么了蔑匣?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棕诵。 經(jīng)常有香客問我裁良,道長,這世上最難降的妖魔是什么校套? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任价脾,我火速辦了婚禮,結(jié)果婚禮上搔确,老公的妹妹穿的比我還像新娘彼棍。我一直安慰自己灭忠,他們只是感情好膳算,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弛作,像睡著了一般涕蜂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上映琳,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天机隙,我揣著相機與錄音,去河邊找鬼萨西。 笑死有鹿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谎脯。 我是一名探鬼主播葱跋,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼源梭!你這毒婦竟也來了娱俺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤废麻,失蹤者是張志新(化名)和其女友劉穎荠卷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烛愧,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡油宜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年掂碱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片验庙。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡顶吮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粪薛,到底是詐尸還是另有隱情悴了,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布违寿,位于F島的核電站湃交,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏藤巢。R本人自食惡果不足惜搞莺,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掂咒。 院中可真熱鬧才沧,春花似錦、人聲如沸绍刮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孩革。三九已至岁歉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膝蜈,已是汗流浹背锅移。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饱搏,地道東北人非剃。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像推沸,于是被迫代替她去往敵國和親备绽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

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

  • 一坤学、概述 iOS開發(fā)中疯坤,相信許多開發(fā)者都遇到過,類似于像微信朋友圈的評論回復功能的開發(fā)深浮,難點莫過于 Cell里面的...
    CoderMikeHe閱讀 33,498評論 115 244
  • 轉(zhuǎn)載微信朋友圈評論列表功能簡單實現(xiàn) 概述 最近朋友問了一個微信朋友圈評論列表的實現(xiàn)压怠,加之以前也做過類似的功能,這兩...
    階前梧葉閱讀 5,841評論 1 26
  • 2017.02.22 可以練習飞苇,每當這個時候菌瘫,腦袋就犯困蜗顽,我這腦袋真是神奇呀,一說讓你做事情雨让,你就犯困雇盖,你可不要太...
    Carden閱讀 1,349評論 0 1
  • 今天這個游記主要寫的是威尼斯 但是講真,一同游覽的另一個海邊小鎮(zhèn)希爾苗內(nèi)的體驗甚至比威尼斯更好~所以題目其實想表達...
    伊倫迪爾閱讀 650評論 0 0