list是gic里面非核心功能中算是最重要的一个元素,list对应iOS中的UITableView,但是前面也已经介绍过了,gic本身是基于Texture的,因此list自然而然是封装自Texture中的ASTableNode,并且gic对ASTableNode进行了进一步的封装,规避了ASTableNode在刷新数据时候可能会出现闪的问题。
暂时先不说ASTableNode,如果想要了解的,直接点击如下链接即可。
先直接列举下list的功能。
list拥有强大的性能优势。identifyString,list没有重用的的概念(相对理解,也即是在xml中使用的时候你无需考虑重用的问题)。这个功能点使得list面对不同的cell模板的时候,全部一视同仁。综上,在实际的使用过程中,使用list大多数情况下你无需关心性能问题。list本身进行了大幅度的性能优化,您可以使用instrument测试下性能。sample中有一个模拟今日头条Feeds的一个专门sample,里面提供了8中不同的模板,每次拉取大概20多条的数据,你会看到性能一直维持着较高的水准,如果你用instrument中的coreAnimation来查看,你会发现几乎没有会影响性能的地方。
list对于ASTableNode的封装也并不全面,有些功能可以说是缺失的,但是也因为gic拥有的强大的自定义能力,你可以对现有元素进行任意的扩展,甚至你也可以直接自定义一个。
从0.3.0版本开始增加如下功能:
| 名称 | 数据类型 | 介绍 | 是否支持绑定 | 是否支持动画 |
|---|---|---|---|---|
| separator-style | Integer(枚举) | cell分割线的样式 | 是 | 是 |
| show-ver-scroll | Bool | 是否显示垂直滚动条 | 是 | 是 |
| show-hor-scroll | Bool | 是否显示水平滚动条 | 是 | 是 |
| content-inset | UIEdgeInsets | 内容边距 | 是 | 是 |
| show-indexs | Bool | 是否显示索引 | 是 | 否 |
| index-color | UIColor | 索引文字的颜色 | 是 | 否 |
| content-inset-behavior | Integer(枚举) | 内容边距行为。iOS11.0以上生效 | 是 | 否 |
| 枚举值 | 对应枚举 | 说明 |
|---|---|---|
| 0 | UITableViewCellSeparatorStyleNone | 没有分割线 |
| 1 | UITableViewCellSeparatorStyleSingleLine | 有分割线 |
| 枚举值 | 对应枚举 | 说明 |
|---|---|---|
| 0 | UIScrollViewContentInsetAdjustmentAutomatic | |
| 1 | UIScrollViewContentInsetAdjustmentScrollableAxes | |
| 2 | UIScrollViewContentInsetAdjustmentNever | |
| 3 | UIScrollViewContentInsetAdjustmentAlways |
###
section的概念就是等同于UITableView中的section,每个list至少需要包含一个section
| 名称 | 数据类型 | 介绍 | 是否支持绑定 | 是否支持动画 |
|---|---|---|---|---|
| title | String | 用来显示索引的标题 | 是 | 否 |
list-item你可以理解为UITableViewCell,list-item也是list唯一能识别的”UI”元素。
| 名称 | 数据类型 | 介绍 | 是否支持绑定 | 是否支持动画 |
|---|---|---|---|---|
| selection-style | Integer(枚举) | 不解释 | 是 | 否 |
| separator-inset | UIEdgeInsets | 是 | 否 | |
| accessory-type | Integer(枚举) | 是 | 否 | |
| event-item-select | string | cell选中事件。 | 是 | 否 |
| 枚举值 | 对应枚举 | 说明 |
|---|---|---|
| 0 | UITableViewCellSelectionStyleNone | 不解释 |
| 1 | UITableViewCellSelectionStyleBlue | |
| 2 | UITableViewCellSelectionStyleGray | |
| 3 | UITableViewCellSelectionStyleDefault | 不解释 |
| 枚举值 | 对应枚举 | 说明 |
|---|---|---|
| 0 | UITableViewCellAccessoryNone | 不解释 |
| 1 | UITableViewCellAccessoryDisclosureIndicator | |
| 2 | UITableViewCellAccessoryDetailDisclosureButton | |
| 3 | UITableViewCellAccessoryCheckmark | |
| 4 | UITableViewCellAccessoryDetailButton | 不解释 |
header、footer 不支持自动计算高度,必须显式设置height属性,并且不能是比例单位,否则不会显示。
0.3.2 开始无需显式设置height属性
从0.3.2版本开始,所有的section都支持单独设置header、footer,并且header、footer都必须包含在section元素中。
在XML中添加list是一件非常简单的事情,只需要两步就能实现。
list下面添加N个list-item1 | <list> |
通过for指令来动态创建list-item
1 | <list> |
- data-context 通过json字符串创建了一个包含4个item的数组作为数据源
- 使用for指令来动态创建list-item
这样也算完成了一个简单的列表创建
添加cell选中事件。
list-item有一个event-item-select的属性,这是一个事件,可以将点击的回调绑定到ViewModel中的某一个方法。只需要你指定该方法的名称即可。
1 | <!--page 相当于 UIViewController--> |
1 | @interface IndexPageViewModel : NSObject |
在这里你可以看到,在list-item绑定了一个onSelect:的事件,该事件的实际回调就在IndexPageViewModel中的onSelect:方法。然后可以通过eventInfo提供的信息获取实际该list-item的数据源·
header、footer
1 | <list> |
多个section
1 | <list> |
除了上面显式指定多个section以外,您也可以使用一个for指令,将section包进去,比如下面:
1 | <list> |