表视图tableView_前进的火车_新浪博客




1.UITableViewController

特点:

1>继承自UIViewController

2>天生自带了一个表视图对象(.tableView属性读取)

3>控制器已经成为了表视图的数据源代理和delegate代理

4>UITableViewController已经遵守了UITableViewDataSource和UITableViewDelegate协议所以,如果想显示表格数据的话,只需要创建一个类,继承自UITableViewController,然后 只需要关注 三问一答 即可,无需再去进行创建表视图 设置代理 遵守协议这些操作了


2. 单元格的重用

理念: 因为系统已经具备了一个能力——自动将那些已经完整的滚动超出屏幕后不需要显示的cell,存到tableView的一个队列中,所以每当需要单元格填充屏幕时,我们可以先尝试着去队列中取,看是否能取到重用的单元格,如果取到了,修改数据,返回,重新出现在界面上,如果,取不到,再新建


方式一:理念 —— 取不到时,自己创建cell实例

方式二:理念 —— 提早跟系统注册cell,然后,放心大胆的去队列取单元格即可,如果取不到,则系统会自动根据提早注册的cell的样式,为我们自动新建一个cell

注意:使用的是tableView的dequeueReusableCellWithIdentifier: forIndexPath:


3.UITableViewCell 单元格

  3.1 UITableViewCell组成

第一部分: 内容视图  contentView

第二部分: 辅助视图  accessoryView

//因为cell一定得显示内容,所以contentView很重要.系统会自动已经创建出contentView实例,所以,可以直接向contentView中添加子视图,如果没创建,就以赋值形式添加

//对于辅助视图accessoryView来说因为没有那么重要,所以系统不会自动将accessoryView创建出实例对象,所以不能直接往这个nil中addSubView

   cell.accessoryView = mySwitch;//自定义辅助视图【开关作辅助视图】

  3.2 内容视图

通过cell 的contentView访问的到

1>可以使用系统提供好得样式直接设置显示内容

  为UITableViewCell准备了三个属性:

textLabel  detailTextLabel  imageView

  可以通过在创建cell时指定cell的样式,来决定三个部分的排布位置

Default样式: 只显示textLabel和imageView,且左右排布

Value1样式:右对齐——三部分都显示,detailTextLabel在右侧

Value2样式:左对齐——图片不显示,detailTextLabel在左侧

SubTitle样式: 三部分都显示,detailTextLabel在textLabel下方显示

2>直接向contentView中添加自定义的内容样式设置

  为了避免重用单元格时,重复的添加子视图,所以,为子视图设定tag值后,再添加到cell中,然后,每次尝试着从cell中先按照tag值取子视图,如果不能取到子视图,再新建添加,如果取得到,那么就直接修改这个子视图中显示的内容即可

  subView.tag  = 1;      设置子视图的tag值

  [view   viewWithTag:1] 取子视图

  3.3 辅助视图  

a>系统版

  cell.accessoryType =  四种类型

  大于号 DisclosureIndicator

  对勾   checkMark

  圆圈i   detailButton

  圆圈i+大于号  detailDisclosureButton…

b>自定义版

  cell.accessoryView  =  自己创建的视图对象

缓冲,缓存的单元格是有多种不同类型(样式)的

[NSBundele mainbundle]获取一个对象

沙格文件

辅助视图,不仅有外观还可以有子视图

名字一方面显示作用,一方面显示内容

为每一个添加进去的子视图起一个标识,tag:旗帜,标志,标签。

tag值可以(只能)设置整数,不要写零,1往上。同一个容器中的子视图的标签是绝对不可以重复的(这里每个标签都在各自的单元格里,所以可以都1)

子类类型的引用是不能指向父类的,但父类类型的引用是可以指向任意一个子类类型的对象。

4.更新表格刷新显示数据

[tableView  reloadData];




单元格重用方式一

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {//每行内容是什么?

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];//先尝试着去队列中按照标识符取cell

   if (cell == nil) {//如果没取到,再新建

        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

    }

    cell.textLabel.text = [NSString stringWithFormat:@"%ld:Hello",indexPath.row+1];

   return cell;

}

单元格重用_方式二(取不到单元格,系统帮我们建

1.注册 [加载函数中提早跟系统注册单元格,只有在队列中取不到单元格时,系统会自动根据提早注册的cell样式(单元格类的描述和名字)为我们自动新建一个cell]

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:

@"MyCell"];

2.在创建单元格的第三问(每行内容是什么?)中

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];//这句执行完cell中一定有对象了,不用去管这个对象是系统新建还是dequeue的

    cell.textLabel.text = @"Hello";



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值