前言
前言
ui.TableView
是ui
模块中使用难度最大,但又使用频率很高的一个组件。要在窗口中创建一个列表视图可能会用到TableView
、TableViewCell
、ListDataSource
还有Delegate
四种对象。本教程分别采用直接使用ListDataSource
实现和重载函数实现两种方法为大家简单演示如何创建一个列表视图。更多详情请参阅中文文档。
正文
正文
使用ListDataSource实现
Pythonista的作者实现了ListDataSource类来帮助我们快速构建一个简单的列表视图。首先在创建ListDataSource的时候你要传一个字典列表给它,列表中的每一个字典代表列表中的每一项,通过设置字典中的title
、image
、accessory_type
三个键值来设置该单元格的属性。然后设置ListDataSource
的action
来绑定单元格被点击时触发的函数。接下来将TableView
的data_source
和delegate
分别设置为ListDataSource
对象即可。
这样我们就简单快速的实现了一个列表视图,除了示例中展示的属性意外还可以设置ListDataSource
的更多属性来对列表的行为进行控制。但总的来说直接使用ListDataSource
只适合相对简单的使用场景,无法实现对更多细节的操控。
1 | import ui |
重载函数实现
通过重载的方法实现一个我们自己的TableView
,可以获得更大更灵活的操纵空间。按照官方文档的说法,我们需要分别重载实现我们自己的ListDataSource
和Delegate
然后在进行绑定,但是分别再另外实现两个类会显得很麻烦,只要实现他们接口就行了,所以我们这里全部写到一个类中,然后再把自己绑定上去就行了。由于在所有ui组件中仅有View允许继承,所以我们单独再创建一个TableView
成员变量,然后将两者frame
设置为相同大小,并添加到subview
中就OK了。本示例为了达到和示例1相同的效果,仅重载了部分方法,更多接口方法的使用请根据自己实际情况的需要参阅文档进行选择。
在利用重载实现的方法中,创建cell
是一个核心步骤,我们除了可以设置cell
本身的属性以外,还可以加入一些其他组件进行改造。cell
本身就是一个View
,但是他还有一个content_view
的属性。一般来说这两个尺寸是一样的,但官方文档建议不要直接吧子视图加到cell
,而是加到他的content_view
下,因为当单元格进入编辑模式时,content_view
会自动调整大小。
1 | import ui |