表格视图UITableView及控制器UITableViewController
UITableViewController表格视图控制器
UITableViewController类继承自UIViewController类,极大地简化了创建UITableView的过程。
UITableViewController负责处理表格布局,并使用一个UITableView实例对其进行填充。
可设置此控制器的窗体以支持任意导航栏或工具栏。可以通过tableView实例变量访问表格视图。
重要提示:手工代码创建UITableViewController的子类时,如果定义loadView方法,则确保调用其超类的实现[super loadView]。只有这样才能保证表格视图的正确设置以及在子类中添加定制功能。若是使用IB创建UITableViewController,则不必向loadView添加任何调用。
UITableView表格视图实例
数据源方法(setDataSource)
UITableView实例依赖外部资源按需为新表格单元格或现有表格单元格提供内容。这种外部源即为数据源。要显示表格,每个数据源都必须实现以下3个核心方法(其定义了表格结构并提供内容)。即每个具体UITableView视图必须实现这三个核心方法:
numberOfSectionsInTableView 返回有多少个分段。可以实现是分段显示或者单个列表显示具体数据。
tableView:numberOfRowsInSection 返回对应的分段有多少个元素,即有多少行。
tableView:cellForRowAtIndexPath 返回指定的行的单元格cell。
注:每个返回的cell类型,都有textLabel、detailTextLabel、imageView、accessoryType四个常用的个性化cell元素的属性。
注意:数据源根据索引路径提供表格单元格。索引路径是NSIndexPath类的对象,描述通过数据树到达特定节点的路径,即它们的分段(section)和它们的行(row)。UITableView实例使用索引路径指定分段section及其中的行row,使用表格的dataSource属性为表格指定一个对象作为其数据源,且该对象必须实现UITableViewDataSourece协议。
数据源被指定后,通过实现tableView:cellForRowAtIndexPath:方法来加载表格及其单元格。通过调用表格的reloadData方法,表格开始查询其数据源加载内容。
指定委托(setDelegate)
UITableView实例使用委托是为了响应用户的交互动作。委托告知表格将响应这些交互的责任移交给指定对象。这个指定的对象通常是拥有表格视图的UITableViewController控制器对象。当然该委托必须实现UITableViewDelegate协议。其委托方法基本上定制表格结构的:
tableView:heightForRowAtIndexPath 返回指定的row的高度。
tableView:heightForHeaderInSection 返回指定分段的header view区域的高度。
tableView:heigthForFooterInSection 返回指定分段的footer view区域的高度。
tableView:titleForHeaderInSection 返回指定分段的header的title,如果这个section header有返回view,那么title就不起作用。
tableView:viewForHeaderInSection 返回指定分段的header的view,若没有,则可以不返回view。
tableView:didSelectRowAtIndexPath 当用户选中某个行的cell的时候,回调用这个。前提是必须设置tableView的一个allowsSelection属性为YES才行。
tableView:accessoryButtonTappedForRowWithIndexPath 响应用户点击cell右边的箭头事件。
tableView:commitEditingStyle: editingStyleforRowAtIndexPath 通知用户编辑了哪个cell。
因此,通过以上理解,我们知道UITableView实例初始化必须设置setDataSource和setDelegate属性,分别指定数据源与委托对象。表视图从遵循UITableViewDelegate协议的对象获取配置数据,从遵循UITableViewDataSource协议的对象获得行数据。数据源提供了绘制所需要的所有数据;委托则只是用于配置表视图的外观并处理某些用户交互。代码示例:
UITableView *tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];
[tableview setDelegate:self];
[tableview setDataSource:self];
[self.view addSubview: tableview];
[tableview release];
说明:除了委托方法调用,UITableView实例还提供了通知。通知使用默认NSNotificationCenter广播更新,让应用程序的不同线程之间可以彼此交流。3.0 SDK中唯一的官方表格通知是UITableViewSelectionDidChangeNotification。
其实UITableView类继承自UIScrollView,是个特殊的ScrollView,这个滚动控件里主要封装了UITableViewCell单元格控件。默认状态下,所有UITableViewController实例都被自动设为UIScrollView委托。
1. UITableView视图通过tableView属性访问。
2. 几乎任何字符串数组都可以用于设置和填充表格。
3. 要显示表格,必须实现numberOfSectionsInTableView、numberOfRowsInSection、cellForRowAtIndexPath这3个核心方法来定义表格皆结构,并提供内容显示。
4. “可重用单元格”是表格视图节省内存使用的高效方式,对于不同种类的单元格应该使用不同的ID标识符。
5. 在分配新单元格时,必须检查重用单元格是否可用。(即检查dequeueReusableCellWithIdentifier:请求的返回值)
6. 当用户选中某个行的cell的时候,回调方法tableView:didSelectRowAtIndexPath:被触发。
7. 关于表格的样式有两种风格的表视图:UITableViewStylePlain(按索引排序显示)、UITableViewStyleGrouped(按组进行分类显示)。
8. 选定单元格的颜色设置有:UITableViewCellSelectionStyleBlue、UITableViewCellSelectionStyleGray、UITableViewCellSelectionStyleNone三种值。
9. 基本表格视图单元格类型:UITableViewCellStyleDefault、UITableViewCellStyleSubtitle、UITableViewCellStyleValue1、UITableViewCellStyleValue2四种类型。
10. 一般,我们所谓自定义表视图其实是直接自定义表行数据的显示布局,即通过自定义UITableViewCell单元格。方法无外乎,要么直接向UITableViewCell添加子视图,要么是子类化UITableViewCell来实现。