一、UITableViewDataSource协议
1.指定显示表视图中几个部分
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
2.获取指定分区中的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection{
return [self.yourArray count];
}
3.请求一个单元格来显示指定行
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// 创建标识符变量来储存第一行单元格标识符
static NSString *CellIdentifier = @"CellIdentifier";
// 创建前面使用过的指定类型的可重用单元
UITableViewCell *cell =
[tableView dequeueResuableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = self.yourArray[indexPath.row];
return cell;
}
此方法第二个参数是一个NSIndexPath对象,表视图使用NSIndexPath结构体的row和section属性,把行和分区的索引绑定到一个对象中。
1> 关于dequeueReusableCellWithIdentifier方法的理解
表本身可以储存大量数据,但表视图一次只能显示规定行数。表中的每一行都由一个UITableView(UIView子类)表示,当表视图单元滚离屏幕时,会进入可重用的单元队列中,当内存空间不足时才会删除。
当tableView刚开始使用时,重用队列肯定为空。因此,每显示一行都需要新建一个cell。假如屏幕可以显示10行,在滚动表单显示第11行时,第1行会滚离屏幕,进入重用队列中;而将要显示的第11行,会优先到重用队列中寻找符合标识符的cell。如果有,则无需新建,节约内存资源,将制定cell出列(dequeue)显示到屏幕中;如果没有,即返回值为nil,就会调用initWithStyle:reueseIdentifier方法新建cell显示到屏幕中。
【参考http://www.docin.com/p-680153700.html】
2> 设置单元格格式:
- default只显示文本标签,可加图像,显示在文本左侧
- subtitle增加详细文本标签,显示在主文本下方
- value1将详细文本(灰)显示在主文本(黑)右侧,同行两端
- value2将详细文本(黑)显示在主文本(蓝)右侧,不显示图标
二、重写表视图单元
(一)重写自定义cell的initWithStyle方法
1.创建UITableViewCell子类
.m文件中添加表视图单元的子视图:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// cell界面布局
CGRect nameLabelRect = CGRectMake(0,5,70,15);
UILabel *nameMarker = [[UILabel alloc] initWithFrame:nameLabelRect];
//可继续添加代码设置标签字体、格式等
------------
// 表视图单元利用一个UIView的子视图contentView管理所有子视图,可将标签作为子视图添加到contentView中
[self.contentView addSubview:nameMarker];
}
return self;
}
2.控制器
1> 为tableView注册cell的可重用标识符
[self.tableView registerClass:[yourCell class] forCellReuseIdentifier:CellTableIdentifier];
2> 获取重用cell
yourCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier forIndexPath:indexPath];
这个方法利用标识符作为键传递给注册机,以获取重用的cell;
若没有可重用的cell,则利用initWithStyle:reuseIdentifier方法自动生成新的cell。
3> dequeueReusableCellWithIdentifier:方法和dequeueReusableCellWithIdentifier:forIndexPath方法的区别
- dequeueReusableCellWithIdentifier:方法不需注册cell标识符,但需判断cell是否为nil,若为nil则利用initWithStyle:reuseIdentifier方法生成新的重用cell;
- dequeueReusableCellWithIdentifier:forIndexPath方法需要注册cell标识符,无需判断cell是否为nil。
(二)使用nib文件
1.在xib中定义输出接口、可重用标识符以及表单元布局
2.在xib中制定cell的class为yourCell
3.注册cell
UINib *nib = [UINib nibWithNibName:@"yourCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:CellTableIdentifier];
4.获取重用cell
yourCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier forIndexPath:indexPath];
若没有可重用的cell,则返回nil作为指令,自动调用awakeFromNib新建cell。
【参考http://www.cocoachina.com/bbs/read.php?tid=290160】