关于TableView的学习

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值