iOS和OSX都提供了表格视图和集合视图。表格视图被设计用来提供一个数据列表,而集合视图被用来显示一个数据网格。它们都可以进行自定义,以提供不同的布局~
1、数据源和委托
尽管表格视图和集合视图有不同的布局,但是却有非常相似的API。当一个数据显示视图准备呈现内容时,它至少要知道两个问题的答案:
*要现实多少项?
*为显示每一项,分别需要做什么?
这些问题是向视图的数据源提出的,数据源就是符合该表格视图的数据源协议的对象。根据正在使用的视图类型,数据源协议是不同的。
数据视图还需要知道其他一些问题的答案。比如,列表每一行的高度是多少?列表应当包含多少部分?这些问题也是由数据源回答的,但是在数据源不能提供这些信息的时候,视图也可以采用一些默认值。
有时候,我们需要应用程序响应用户与视图内容的交互。用户能做的具体事情会因平台、数据视图的类型以及视图配置的方式不同而不同。一些可能的交互包括:
*单击一个项目
*重新安排内容
*删除或者修改内容
这些操作由视图发送给其委托。
2、表格视图:iOS上的UITableView
iOS上的表格视图显示由表格视图单元格构成的一个滚动列表,表格视图单元格是一些视图,可以包含任何数据。UITableView是为提高素的而设计的:用户在iOS上执行的最常见的手势就是上下轻弹一个滚动列表。这就意味着,应用程序需要以足够高的帧率来实现列表滚动的动画(60帧/s)
节和行:
表格视图可以分为多个节,每一节包含一个或者多个行。利用节,可以按照有意义的方式来划分内容。例如,联系人应用程序使用的表格视图按照姓氏划分节,而设置应用程序则按照类别划分各节。
有了行和节的概念,我们搜索表格视图中的具体位置就不是按行标识的,而是按照索引路径来标识。
表格视图控制器:
如果仅仅向视图添加一个UITableView,将只能看到一个空列表。默认情况下,UITableView依赖一个数据源对象向其提供有关所显示内容的信息。
任何对象都可以是UITableView的数据源,唯一的要求就是它必须遵守UITableViewDatasource协议。
该协议定义了两个关键方法( tableView(_,numberOfRowsInSection)和tableView(-,cellForRowAtIndexPath) ),分别返回表格中指定节的行数和返回指定索引路径的UITableViewCell。在下面的代码栗子中可以看到这两个方法。
表格视图单元格:
表格视图单元格表示表格视图的一项。表格视图单元格是UITableViewCells,它是UIView的子类。
当表格视图的每个可视行进入视图时,都会调用tableView(_,cellForRowAtIndexPath)方法。表格视图不用费心去显示那些不可见的内容。
例如,如果有一个表格视图,有1000行,可是页面上最多显示10行。对于那些木有现实的行来说,表格视图没有必要尝试为其显示单元格,所以只有当单元格将要显示在屏幕上的时候,才会调用方法tableView(_,cellForRowAtIndexPath)。
单元格的再用:当用户卷动表格视图的时候,列表中的一些项目会从屏幕消失,儿另外一些则会进入屏幕。当列表中的一个表格视图单元格滚动至屏幕之外的时候,就将它从表格视图中删除,放到一个再用队列中。这个队列中存放了已经被创建但是当前不可兼得UITableView对象。当一个单元格被滚动进入视图的时候,表格视图再从队列中提取一个已经创建的UITableViewCell对象,并对其进行准备,而不是创建一个全新的单元格。这种方法的好处是可以节省所有用来分配和设置新对象的时间。
本节就酱紫啦~下一节会有栗子,作为一只兔几要去蹦哒一会儿了吖~