教你搭建淘寶首頁-手把手

效果圖

taobao-ok.gif

github 傳送門: https://github.com/hunter858/taobao
如果你喜歡我寫的demo 請(qǐng)給我點(diǎn)個(gè)???? 謝謝????

工程用的cocoapods 做的依賴管理裂垦,新下載的小伙伴 請(qǐng)用pod update 更新庫(kù)卒蘸;

截圖

  • 1.1 簡(jiǎn)單介紹工程目錄


  • 1.2. 工程入口


首頁的核心厘擂,其實(shí)就是抽象 tableviewControl 層德玫,將cell的處理 ,數(shù)據(jù)的賦值泼掠,以及點(diǎn)擊cell 的交互铃辖,放到了 viewModel 層;

我們知道冬筒,實(shí)現(xiàn)tableview,一般在控制器需要實(shí)現(xiàn)tableivdelegate方法 和dataSource方法

TableViewDataModel 囊括了tableView 所有需要展示的cell, 響應(yīng)tableivew 的cell 高度茅主,以及cell 的點(diǎn)擊事件舞痰,具體可以看看 TableViewDataModel 的實(shí)現(xiàn)過程,其實(shí)就是抽象化對(duì)象诀姚;

  • 1.3 我們來看一下响牛,viewModel 具體如何實(shí)現(xiàn)的

homeViewModel 初始化,成為UItableView的代理赫段,homeViewModel實(shí)現(xiàn)tableview的所有代理方法呀打。 -setData:(void (^)())callback{} 方法加載數(shù)據(jù),完成后通過block 回調(diào) 刷新tableview;

在這個(gè)方法內(nèi)糯笙,我們發(fā)送網(wǎng)絡(luò)請(qǐng)求拿到首頁的數(shù)據(jù)(我是通過charles抓的taobao 的數(shù)據(jù)店量,寫成 json 文件放在了本地)梗掰;
所以你假裝網(wǎng)絡(luò)請(qǐng)求到了數(shù)據(jù);-(void)LoadData方法 是加載本地 數(shù)據(jù)的方法;

在工程內(nèi)部有個(gè)文件夾放著 .chls.json的文件,如果你有charles脆烟,可以直接打開.chls 颇象,拿到數(shù)據(jù)靠娱,然后把數(shù)據(jù)拷貝出來蓝纲,放到chromejson handel 里,這樣數(shù)據(jù)結(jié)構(gòu)清晰可見耘眨;如圖所示



仔細(xì)研究數(shù)據(jù)結(jié)構(gòu)昼榛,你就會(huì)在里面找到規(guī)律,淘寶的整個(gè)數(shù)據(jù)結(jié)構(gòu)是什么樣子剔难,它是如何排版整改頁面的胆屿;

如果不太清楚數(shù)據(jù)的歸屬模塊,可以把url放到瀏覽器中钥飞,參考著taobaoH5 頁面莺掠,就知道哪個(gè)圖片是 taobao 哪個(gè)模塊的了,taobao鏈接:https://m.taobao.com/#index

  • 1.4 我們來看看衫嵌,我們是如何實(shí)現(xiàn)第一個(gè)cell 的顯示的读宙;
  • 創(chuàng)建流程
    1. 創(chuàng)建一個(gè)cell
    2. 創(chuàng)建一個(gè)cellModel
    3. cellModel一個(gè)cell(當(dāng)cellModel 響應(yīng)tableview 的 方法);
    4. cellModel一個(gè)cell高度(當(dāng)cellModel 響應(yīng)tableview 的 方法)楔绞;
    5. cellModel一個(gè)點(diǎn)擊Block (當(dāng)cellModel 響應(yīng)tableview 的 方法)结闸;
    6. 把cellModel 放到 TableViewDataModel 的section 里面唇兑;

等TableViewDataModel 響應(yīng)了tableivew 的代理方法的時(shí)候,頁面就出來了桦锄;嗯嗯扎附、就是這么回事,等你想明白了结耀,就理解了


UItableivewCell我是通過- (id)initWithFrame:(CGRect)frame方法創(chuàng)建的留夜;這其實(shí)就是加載xib 的方法,只是這樣寫更安全一些图甜,為什么要用xib 呢碍粥,因?yàn)閤ib 做布局 比用代碼更快;

通過cell 響應(yīng) setSeparatorInset: setLayoutMargins : 這兩個(gè)方法黑毅,可以設(shè)置UItableview的分割線的長(zhǎng)度,讓其顯示不顯示嚼摩;

這里以首個(gè)cell的滾動(dòng)輪播器為例,把SDCycleScrollView放到contentView上矿瘦,

聲明一個(gè)賦值方法枕面,把數(shù)據(jù)傳進(jìn)來,滾動(dòng)輪播器就出來缚去,是不是很簡(jiǎn)單潮秘;


在cell 的外部,我們聲明一個(gè)block屬性病游,用于判斷點(diǎn)擊了 第幾張圖唇跨, 實(shí)現(xiàn)SDCycleScrollView的代理方法, 把跳轉(zhuǎn)的URL 傳遞到homeviewModel 里衬衬,這樣我們是不是能根據(jù)URL進(jìn)行跳轉(zhuǎn)了买猖,對(duì),就是這么簡(jiǎn)單滋尉,具體實(shí)現(xiàn)玉控,你去工程里慢慢看;

差不多明白了吧狮惜,沒看明白我再講一個(gè)cell 高诺,
以淘寶的菜單為例,拿到10 條數(shù)據(jù)的我碾篡, 創(chuàng)建一個(gè)個(gè)小的 smallIconView虱而,從上往下,依次排列成2 行开泽,每行 5個(gè)的cell牡拇,如圖所示,是不是樣子出來了,

項(xiàng)目中的smallIconView其實(shí)不是普通的UIview 惠呼,創(chuàng)建的時(shí)候是個(gè)UIview导俘,但是UIView本身沒有點(diǎn)擊事件,所以剔蹋,我把UIView換成了UIcontrol ;

最后在賦值數(shù)據(jù)的 時(shí)候旅薄,給每個(gè) 小的Control 添加一個(gè)方法 ,利用ReactiveCocoa給它添加一個(gè)點(diǎn)擊事件泣崩,把跳轉(zhuǎn)URL 傳到homeViewModel中 少梁,是不是很簡(jiǎn)單

后面的很多cell也是同樣的道理 都寫在了-(void)setData:(void (^)())callback方法里;

因?yàn)?后面的跳轉(zhuǎn),我都是通過一個(gè)UIWebview 來顯示的矫付,所以不做過多贅述猎莲,如果你的項(xiàng)目比較復(fù)雜,可以把URL傳到工具里技即,利用工廠生成不同的UIViewControl跳轉(zhuǎn)到指定的控制器著洼;

如果你喜歡我寫的 demo
請(qǐng)給我點(diǎn)個(gè)???? 謝謝??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市而叼,隨后出現(xiàn)的幾起案子身笤,更是在濱河造成了極大的恐慌,老刑警劉巖葵陵,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件液荸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡脱篙,警方通過查閱死者的電腦和手機(jī)娇钱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绊困,“玉大人文搂,你說我怎么就攤上這事〕永剩” “怎么了煤蹭?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)取视。 經(jīng)常有香客問我硝皂,道長(zhǎng),這世上最難降的妖魔是什么作谭? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任稽物,我火速辦了婚禮,結(jié)果婚禮上折欠,老公的妹妹穿的比我還像新娘贝或。我一直安慰自己秧倾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布傀缩。 她就那樣靜靜地躺著,像睡著了一般农猬。 火紅的嫁衣襯著肌膚如雪赡艰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天斤葱,我揣著相機(jī)與錄音慷垮,去河邊找鬼。 笑死揍堕,一個(gè)胖子當(dāng)著我的面吹牛料身,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衩茸,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼芹血,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了楞慈?” 一聲冷哼從身側(cè)響起幔烛,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎囊蓝,沒想到半個(gè)月后饿悬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聚霜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年狡恬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝎宇。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弟劲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姥芥,到底是詐尸還是另有隱情函卒,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布撇眯,位于F島的核電站报嵌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏熊榛。R本人自食惡果不足惜锚国,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玄坦。 院中可真熱鬧血筑,春花似錦绘沉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喻喳,卻和暖如春另玖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背表伦。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工谦去, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹦哼。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓鳄哭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纲熏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妆丘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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