iOS开源&高仿项目精选demoiOS 小demo

教你搭建淘宝首页-手把手

2017-07-13  本文已影响682人  pengxiaochao

效果图

taobao-ok.gif

github 传送门: https://github.com/hunter858/taobao
如果你喜欢我写的demo 请给我点个✨✨✨✨ 谢谢🙏😊

工程用的cocoapods 做的依赖管理,新下载的小伙伴 请用pod update 更新库;

截图

首页的核心,其实就是抽象 tableviewControl 层,将cell的处理 ,数据的赋值,以及点击cell 的交互,放到了 viewModel 层;

我们知道,实现tableview,一般在控制器需要实现tableivdelegate方法 和dataSource方法

TableViewDataModel 囊括了tableView 所有需要展示的cell, 响应tableivew 的cell 高度,以及cell 的点击事件,具体可以看看 TableViewDataModel 的实现过程,其实就是抽象化对象;

homeViewModel 初始化,成为UItableView的代理,homeViewModel实现tableview的所有代理方法。 -setData:(void (^)())callback{} 方法加载数据,完成后通过block 回调 刷新tableview;

在这个方法内,我们发送网络请求拿到首页的数据(我是通过charles抓的taobao 的数据,写成 json 文件放在了本地);
所以你假装网络请求到了数据;-(vodi)LoadData方法 是加载本地 数据的方法;

在工程内部有个文件夹放着 .chls.json的文件,如果你有charles ,可以直接打开.chls ,拿到数据,然后把数据拷贝出来,放到 chrome 的 json handel 里,这样数据结构清晰可见;如图所示



仔细研究数据结构,你就会在里面找到规律,淘宝的整个数据结构是什么样子,它是如何排版整改页面的;

如果不太清楚数据的归属模块,可以把url放到浏览器中,参考着taobaoH5 页面,就知道哪个图片是taobao哪个模块的了,taobao链接:https://m.taobao.com/#index

等TableViewDataModel 响应了tableivew 的代理方法的时候,页面就出来了;嗯嗯、就是这么回事,等你想明白了,就理解了


UItableivewCell我是通过- (id)initWithFrame:(CGRect)frame方法创建的;这其实就是加载xib 的方法,只是这样写更安全一些,为什么要用xib 呢,因为xib 做布局 比用代码更快;

通过cell 响应 setSeparatorInset: setLayoutMargins : 这两个方法,可以设置UItableview的分割线的长度,让其显示不显示;

这里以首个cell的滚动轮播器为例,把SDCycleScrollView放到contentView上,

声明一个赋值方法,把数据传进来,滚动轮播器就出来,是不是很简单;


在cell 的外部,我们声明一个block属性,用于判断点击了 第几张图, 实现SDCycleScrollView的代理方法, 把跳转的URL 传递到homeviewModel 里,这样我们是不是能根据URL进行跳转了,对,就是这么简单,具体实现,你去工程里慢慢看;

差不多明白了吧,没看明白我再讲一个cell ,
以淘宝的菜单为例,拿到10 条数据的我, 创建一个个小的 smallIconView,从上往下,依次排列成2 行,每行 5个的cell,如图所示,是不是样子出来了,

项目中的smallIconView其实不是普通的UIview ,创建的时候是个UIview,但是UIView本身没有点击事件,所以,我把UIView换成了UIcontrol ;

最后在赋值数据的 时候,给每个 小的Control 添加一个方法 ,利用ReactiveCocoa给它添加一个点击事件,把跳转URL 传到homeViewModel中 ,是不是很简单

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

因为 后面的跳转,我都是通过一个UIWebview 来显示的,所以不做过多赘述,如果你的项目比较复杂,可以把URL传到工具里,利用工厂生成不同的UIViewControl跳转到指定的控制器;

如果你喜欢我写的 demo
请给我点个✨✨✨✨ 谢谢🙏

上一篇下一篇

猜你喜欢

热点阅读