使使MVC模式下的模式下的iOSTableview
如果你写过 iOS 项目的话,应该会了解到,iOS 里面最常用的一个控件就是 UITableView;即便没写过 iOS 项目,你应该也
会在一些流行的 App 里面看到过它,比如:YouTube,Facebook,Twitter,Medium 等等。一般来讲,当你想要在一个页面
上,展示一个数量动态变化的数据的时候,你应该会考虑使用 UITableView。
还有一个基础控件是 CollectionView,它相对来讲更灵活,所以我个人更喜欢用这个。稍后我还会写一篇文章来讲它。
所以,在你的项目里面,不可避免的会用到 UITableView。
比较常见的做法是使用 UITableViewController,它有一个内置的 UITableView;通过简单的设置就可以让它工作起来,你需
要做的只是设置好数组数据和显示数据的 Cell。它使用起来很简单,而且也可以满足需求,但是它有一个缺点:这会让
UITableViewController 里面的代码变得超级长,而且这打破了 MVC 模式。关于 MVC 具体是什么,或者我们为什么要去了解
它,你可以先看一下 这篇文章(译文),它很好的介绍了 iOS 里面所有的架构模式。
即便你不想去弄懂所有的这些模式,至少对于 UITableViewController 里面的那上千行代码,你总是想要重构划分一下的吧。
在我的上一篇文章里面,我提到了 从 Controller 向 Model 传递数据的三种方式。
在这篇文章里面,我要讲的是我处理 tableView 所有的方式,也就是在上篇文章里提到的 - 代理的方式。用这种处理方式,可
以让代码看起来更整洁、模块化、易重用。
这次不适用 UITableViewController,而是把它划分成几个类:
DRHTableViewController:UIViewController 的子类,然后添加一个 UITableView 作为子视图
DRHTableViewCell:UITableViewCell 的子类
DRHTableViewDataModel:它有一个 API 方法:创建数据并用代理的方式返回数据给 DRHTableViewController
DRHTableViewDataModelItem:数据类:它包括了展示在 DRHTableViewCell 里面的所有数据
先从 UITableViewCell 开始吧。
一、TableViewCell
以单视图应用(Single View Application)为模板,创建一个新工程;然后删掉自带的 ViewController.swift 和
Main.storyboard 文件。稍后我们会一步步的创建所有用到的文件。
首先,创建一个 UITableViewCell 的子类。如果你想用 XIB,就勾选“Also create XIB file”这个选项。
在这里,我们想要做的是一个 Medium 主页的简化版,所以需要添加下面这些子视图: