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-item
1 | <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> |