下厨房的首页通过UITableView实现展现信息.想实现首页,首先我们需要先去了解UITableView的结构.
1.UITableView的整体结构
正是因为这个结构,当你去做一款APP的时候其实可以采用很多模式去解决问题,用不同的headerView都可以解决问题。当你了解了大体的细节了之后我们要继续深入研究另外一个结构UITableViewCell虽然在实际的开发中我们经常会自定义Cell但是还是需要了解一下Cell的系统默认结构。
2.UITableViewDataSource
之所以有了DataSource应该算是iOS语言开发者也是按照MVC模式搞出来的,所以他们也在分离各个层次。
因为之前只是知道有这么东西你一定要继承,没有研究这个协议主要做什么的。今天鼠标一点击,瞬间明朗了许多。
Apple文档上面写的是:这是一个呈现数据模型对象,但是不提供关于外表信息包括Cells.也就是说有多少rows,sections,能否移动.....等等这些不涉及到行为和呈现。
以下几个方法是使用频率比较高的一些方法,开始我想在每个方法后面做好注释,但是发现其实苹果的方法名已经解释了这个方法的作用。
1/tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
2/tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
3/numberOfSectionsInTableView(tableView: UITableView) -> Int
3.UITableViewDelegate
TableView的代理主要负责Cell的行为和呈现。方法主要有设置高度,设置footerView和headerView,选中的处理,编辑的处理等等.
当你使用了UITableView一定记得要设置数据源(DataSource)和代理(Delegate).如果你使用了UITableViewController这个就得另外说了,你要继承了UITableViewController 就不需要设置了,因为UITableViewController已经帮你设置好了。
4.Cell的复用
貌似现在到处的面试题里面都会有这道题,已经被问烂的问题了。原理很简单,苹果会建立一个池塘用于存储Cell模型的,接着通过你传递的各种条件计算出一页能最多显示多少个一样的Cell,通过一个identifier
确定是否是同一款的Cell,假如通过计算一页显示10个相同的Cell,只会生成10个模具放在池塘里面,接着当一行Cell在屏幕消失了,而新的Cell出现,这时候幕后做的工作就是:消失的Cell数据暂时清楚,模版留着给新出现的Cell使用,只要添上最新的数据就可以了。
整个过程就是这样的,即使你有大量的cell也不至于对手机产生CPU产生大量的消耗。
5.Tips
开发期间会遇到很多好玩的bug,也在网络找到了很多前辈的温馨提醒信息,现在整理如下
1.如何让UITableView不显示多余的分隔线?
self.tableView.tableFooterView = [[UIView alloc] init];(OC)
self.tableView.tableFooterView = UIView() (Swift)
2.在 tableView 的 style 为 Grouped 时,设置:tableView:heightForHeaderInSection:
和 tableView:heightForFooterInSection:
返回值为 0 可能无效,需设置成 0.01。
3.不要实现没有任何意思的delegate方法。
4.identifier一定要写成静态,因为滚动,数据reload,初始化等等都会执行cellForRowAtIndexPath。
5.其实我经常使用reloadData()方法,其实还可以局部刷新。
6.虽然我不太使用Xib文件,今天在看下厨房的APP就发现他们有很多的XIB文件,只要注意不要过载
7.如果tableView出现重叠的话,请使用removeFromSuperview
如果还有更多的我会继续补充。
其实今天没写自定义Cell,但是我觉得当你了解了一个控件之后,再去自定义应该还好吧。我记得之前在网上看到一篇讲述如何自定义控件的文章,我得好好研究好好的写一下整理一下。
确实写了一篇文章发现文笔需要改进,大脑的知识还是不够多,希望能快速成长和进步。
按照计划明天得搞定首页的所有信息,也就是明天需要写ORM了,因为涉及到Model层级的东西,也会涉及到一定的网络知识和约束,所以可能会分两篇来写,约束还是改到周末吧,因为串哥要做分享
我倒是建议大家能使用storyboard,所见即所得。现在真的需要研究一下under the hood。总等着别人来喂你,差距会越来越大了。