UITableView 由section 和 cell组成,需要用户自己实现其两个代理(一个关于dataSource ,另一个是关于一些behavior 的响应行为),比较典型的是有几个section,每个section几个cell, 也可以自己定制某个section或者cell的外观,在里面add 一些view, 达到需要的效果。
UITableView 有两种style,一种是plain ,一种是grouped.后者比前者多了一个backgroundView,会覆盖在backgroundColor的上方,当然你可以将其设为Nil,这样grouped 的圆角效果就没有(窃以为圆角效果就是由backgroundView实现的。
section部分默认就是插入了一个section label,可以通过代理customize 这个label的外观,基本可以达到希望的任何效果。
UITableViewCell 是一个重要的部分。
(1)cell引入了reuse机制,但是其实只是省去了初始化默认cell的时间,如果cell的外观比较复杂,其实节省不了时间,但是应该可以自己实现reuse的机制。本质就是把cell push到一个stack 里面(可能有问题,应该是存在cache中,具体哪儿不清楚),保存的数目比一屏幕的cell再多几个。
(2)cell每次默认初始化的时候都是320*34,但是在cellWllDisplay的时候会根据tableview的情况改变自己的frame,所以感觉只有在willDisplay这个代理中改变cell的frame才有意义,但是这样的话在建立cell的时候如果add subview那subview的frame将如何设置呢,难道也要在这个代理中设置么,这个地方还不是很清楚(或许可以在layoutSubView中设置)
(3)默认的cell上面基本是空的,但是他默认会有两个label和一个imageview,在edit模式下还有一个accesoryView不过会直到你要调用这些控件,才会create,否则应该都是Nil。这样设计可以表面浪费内存,提高效率。
(4)如果是grouped类型的,cell的appearance比较奇怪,backgroundView比cell的view要小,不知道依次调用以下接口(具体名称忘记,仅意会)
UITableView的动作触发设计的非常好。 (这段比较水,忘记了要,下次要及时记录)
(1)willHighlight (2)didHighlight (3)will select (4)didSelect (5)afterSelect