Git Product home page Git Product logo

taobao's Introduction

高仿淘宝首页


使用说明:

  1. git clone https://github.com/hunter858/taobao.git copy项目
  2. pod update 引入第三方依赖包
  3. 双击打开 .xcworkspace的文件 运行即可

项目用到的开源库


  1. AFNetworking 网络请求
  2. Masonry 轻量级的布局框架
  3. SDWebImage 加载网络图片和缓存图片
  4. reactcocoa 函数式编程


项目截图


####效果图 taobao-ok.gif

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

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

####截图

  • 1.1 简单介绍工程目录

  • 1.2. 工程入口

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

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

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

  • 1.3 我们来看一下,viewModel 具体如何实现的

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

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

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

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

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

  • 1.4 我们来看看,我们是如何实现第一个cell 的显示的;
  • 创建流程
    1. 创建一个cell
    2. 创建一个cellModel
    3. 给cellModel 一个cell (当cellModel 响应tableview 的 方法);
    4. 给cellModel 一个cell高度 (当cellModel 响应tableview 的 方法);
    5. 给cellModel 一个点击Block (当cellModel 响应tableview 的 方法);
    6. 把cellModel 放到 TableViewDataModel 的section 里面;

等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 请给我点个✨✨✨✨ 谢谢🙏

taobao's People

Contributors

hunter858 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

taobao's Issues

数据刷新

请问如何在网络取到数据的时候再去刷新单个cell或tableview的数据呢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.