說(shuō)明
? 該思想來(lái)自同事LEAF另玖,我是學(xué)習(xí)他的困曙,非本人原創(chuàng)。(程序猿應(yīng)該要尊重別人的成功谦去,因此特寫(xiě)在最前慷丽。)
問(wèn)題
? 當(dāng)項(xiàng)目中用到多種UITableViewCell(這實(shí)在是太常見(jiàn)了),其表面非常相似鳄哭,但是又略有區(qū)別要糊,屬于可以拆分成不同部分的組合的時(shí)候,如何設(shè)計(jì)父類(lèi)妆丘,會(huì)讓代碼更漂亮锄俄?
效果如圖:
? 情景可以更多局劲,此處不再一一列舉。這些cell高度的相似奶赠,很明顯都是由不同的組件組合一起的鱼填,在iOS中如何實(shí)現(xiàn)這樣的父類(lèi),讓不同的cell繼承自同一個(gè)父類(lèi)毅戈,來(lái)讓自己的代碼變得漂亮呢苹丸?
我們公司的解法
struct閃亮登場(chǎng) :struct (C programming language) - Wikipedia
第一步:
? 抽象:將cell抽象成四個(gè)部分,分別是Top竹祷,Content谈跛,Title,F(xiàn)ooter塑陵,其中四個(gè)組件的樣式又各有不同的組合感憾,且各個(gè)組件本身可能存在,也可能不存在令花。
? 廢話不多說(shuō)阻桅,直接上代碼。
1. 不同部分組合(共四部分兼都,可以配置成不同的組合嫂沉,甚至可以使用 "|" 操作。):
第二步:
? 組裝:使用結(jié)構(gòu)體來(lái)組裝我們需要的cell樣式扮碧。
1. 大招大招趟章,構(gòu)造struct(構(gòu)造一個(gè)結(jié)構(gòu)體,來(lái)組裝當(dāng)前cell的各個(gè)部分):
2. 代碼實(shí)現(xiàn):
第三步:
? 配置:配置初始樣式慎王。
1. 初始化基本樣式蚓土,項(xiàng)目使用VFL布局,其中的imageContentRatio以及customerContentRatio是用來(lái)根據(jù)不同的UI調(diào)整內(nèi)容的高度赖淤,子類(lèi)可以重寫(xiě))
2. 正式組裝蜀漆,根據(jù)結(jié)構(gòu)體組裝UITableViewCell:
第四步:
? 使用:是騾子是馬,拉出來(lái)溜溜咱旱!
1. 新建UITableViewCell繼承自該父類(lèi)确丢,只需要實(shí)現(xiàn)一個(gè)方法:(即可以實(shí)現(xiàn)一個(gè)沒(méi)有top,中間是一個(gè)大圖UIImageView吐限,接下來(lái)是一個(gè)自定義的UIView鲜侥,然后就是標(biāo)題簡(jiǎn)介,最后就是一個(gè)帶評(píng)論等信息的Footer诸典,是不是很cool剃毒?)
2. 更多調(diào)整,還可以實(shí)現(xiàn)以下方法,在子類(lèi)中去調(diào)整cell不同部分所占的高度赘阀,Very easy益缠,right ?
寫(xiě)在最后
? 由于暫時(shí)沒(méi)有時(shí)間整理完整demo,稍后會(huì)在貼上github的demo鏈接基公,有關(guān)本案例中牽涉到的如何使用VFL計(jì)算UITableViewCell高度等內(nèi)容幅慌,會(huì)在之后章節(jié)中分享,并期待大家分享你們的更好的解決方案轰豆。
? PS:該實(shí)現(xiàn)思路來(lái)自于同項(xiàng)目組的同事LEAF胰伍,在此對(duì)他表示感謝