(五)UITableView的用法一

一、表视图的介绍

1、表视图和其他视图一样,它是iOS中最重要的试图,很多应用程序都会使用到,表只是一个容器,要想显示内容,必须提供信息。

2、表试图里面可以放很多行信息,使用表视图可以显示一个单元格列表,每个单元格列表都包含大量的信息,但仍然是一个整体。并且可以将表视图划分为多个区(section),以遍从视觉上将信息分组。表视图控制器是一种只能显示表视图的标准视图控制器,可以在表视图占据整个视图时使用这种控制器。

3、表视图的两种风格(或者说外观)

  1)普通风格(或者叫无格式,它不像分组表那样在视觉上将各个区分开,但通常带可触摸的索引(类似于通讯录),有时又称他们为索引表)

    UITableViewStylePlain(段里面较多数据可以保持段头保持不动)

  2)分组风格(分组)

    UITableViewStyleGrouped

  3)UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。

二、表视图的基本结构

1、表视图有表头、表尾、中间一连串单元格试图组成 (表头,设置单元格视图,表尾)

1)设置表头 tableHeaderView (其实就是建一个label)

例如 :给tableView设置表头

UILabel *headerLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 60)];

headerLable.textAlignment = NSTextAlignmentCenter;//表头设置在中间

headerLable.text = @"五期联系人";

headerLable.backgroundColor = [UIColor cyanColor];

tableView.tableHeaderView = headerLable;

2)设置单元格试图(每个单元格都有独特的标示符,也成为重标示符,(reuse)用于在编译时引用单元格;配置表视图时,必须使用这些标示符)

     UITableViewCell,单元格也可以分段显示,每一段都可以通过代理设置段头和段尾

3)设置表尾 tableFooterView

 例如:给tableView设置表尾

UILabel *footterLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 60)];

footterLable.textAlignment = NSTextAlignmentCenter;

footterLable.text = @"未来由我创,爱拼才会赢.";

footterLable.backgroundColor = [UIColor clearColor];

tableView.tableFooterView = footterLable;
  1. tableView的常用属性和方法(每个属性都有举例)如果是建立的UITabelView 表达时用 它的对象加 属性名字,如果是基于UITableViewController,则运用属性直接用self.加属性名字
      1.   设置表视图分割线风格

      @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;
     例如:
      self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

      self.tableView.separatorColor = [UIColor cyanColor];

     2. 设置表视图分割线颜色,默认标准灰色
       
     @property(nonatomic,retain) UIColor *separatorColor;
    
     例如:tableView.separatorColor = [UIColor redColor];

     3.设置表视图的头部视图
 
     @property(nonatomic,retain) UIView *tableHeaderView;

     例如:给tableView设置表头
     UILabel *headerLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 100)];
     headerLabel.textAlignment = NSTextAlignmentCenter;
     headerLabel.text = @"宁做鸡头不做凤尾";
     headerLabel.textColor = [UIColor whiteColor];
     headerLabel.backgroundColor = [UIColor clearColor];
     tableView.tableHeaderView = headerLabel;
     
     4. 设置表视图的尾部视图

     @property(nonatomic,retain) UIView *tableFooterView;
     
     例如: 给tableView设置表尾
     UILabel *footerLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 100)];
     footerLabel.textAlignment = NSTextAlignmentCenter;
     footerLabel.text = @"爱咋咋地";
     footerLabel.textColor = [UIColor whiteColor];
     footerLabel.backgroundColor = [UIColor clearColor];
     tableView.tableFooterView = footerLabel;
      
     5.设置表视图单元格的行高

     @property(nonatomic) CGFloat rowHeight;
     例如:
         tableView.rowHeight = 100;
      
     6.设置表视图背景
  
        @property(nonatomic, readwrite, retain) UIView *backgroundView
    例如:
          tableView.backgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"apple.jpg"]];//后面是图片名字
     
     7.刷新表视图单元格中数据

        - (void)reloadData;

      8.显示指示条
      
        showsVerticalScrollIndicator

     9 设置表视图section头部行高

        @property(nonatomic) CGFloat sectionHeaderHeight;

       -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
        {

         return 40;

        }
     10. 设置表视图section尾部部行高

        @property(nonatomic) CGFloat sectionFooterHeight

       -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
        {
           return 40;
        }

三、单元格的显示

1、单元格的位置表示

   NSIndexPath:能表示当前cell是tableView的第几段第几行

2、单元格的创建(必须有一个标识符)

   UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

cell的样式

     1)UITableViewCellStyleDefault

       左侧显示textLabel,imageView显示在最左边

     2)UITableViewCellStyleValue1

       左侧显示textLabel、右侧显示detailTextLabel,imageView显示在最左边

     3)UITableViewCellStyleValue2

        左侧依次显示textLabel(默认蓝色)和detailTextLabel,imageView可选

     4)UITableViewCellStyleSubtitle

        左上方显示textLabel,左下方显示detailTextLabel,imageView显示在最左边

    cell的辅助图标 accessoryType (accessory |əkˈsesəri| 辅助,附加的)

     1) 不显示任何图标
    
        UITableViewCellAccessoryNone, 

     2) 跳转指示图标  

        UITableViewCellAccessoryDisclosureIndicator

     3) 内容详情图标和跳转指示图标

        UITableViewCellAccessoryDetailDisclosureButton

     4) 勾选图标

         UITableViewCellAccessoryCheckmark

     5) 内容详情图标

         UITableViewCellAccessoryDetailButton 

     5) 自定义辅助图标

         accessoryView属性

3、cell的常用属性

   1)设置cell的背景试图

      backgroundView

     
   2)设置选中的cellbei的背景图片

      selectedBackgroundView

      cell.selectedBackgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"tableCell"]];


   3) 设置选中时的样式

      selectionStyle

4.UItableView表中的每一行都由一个UItableViewCell表示可以用一个图像,一些文本,一个可选择的辅助图标来配置每个UItableViewCell对象,UItableViewCell为每个cell定义了如下的所示的属性

      1). textLable:Cell的主文本标签(一个UILable的对象)

      2). detailTextLable :cell的二级文本标签,当需要添加额外细节时(一个UILable对象)

      3) . imageView :一个用来装载图片的图片视图

5.UItableView 必须实现的3个核心方法(段数,行,建立一个cell)

1).段的数量,返回表视图划分多少个分区(这个方法可以分段显示或者单个列表显示我们的数据)不写代表一行

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

2).设置某段行的数量 //返回给定分区有多少行,分区编号从0开始(不同的分段返回不同的行数可以用switch来做,如果是单个列表,就返回单个想要的函数即可)

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section


3).- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath//返回一个经过正确配置的单元格对象,用于显示在表视图的指定位置(通过我们索引的路径section和row来确定)

四、代理方法(UITableViewDelegate)

1、一般是处理表视图基本样式(单元格高度)以及捕捉选中单元格事件

2、常用代理方法(下面的返回值都是数字)

 1)配置行高

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

 2)设置section 头部、尾部视图的高度(段头,段尾)

  - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

  - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

 3)自定义section头部、尾部视图,注意:需要指定高度

  1.- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
例如:
//自定义段头
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 50)];

 NSString *title = dataArray[section][@"title"];

label.text = title;

label.backgroundColor = [UIColor redColor];

label.textAlignment = NSTextAlignmentCenter;//把自定义的段头段位放到中间


return label;

}

//自定义段尾
  - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 50)];

NSString *title = dataArray[section][@"trail"];

label.text = title;

label.backgroundColor = [UIColor redColor];

label.textAlignment = NSTextAlignmentCenter;


return label;

}


 4)用户单击单元格中辅助按钮时,调用该方法

  - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

 5)用户单击单元格,调用该方法(五六很像,大家要区分开)

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

 6)取消选中单元格时,调用该方法

  - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);

 7)设置单元格编辑样式

  - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

  8).创建lable时带的一些属性
    //给label指定内容
    cell.textLabel.text = self.dataArray[indexPath.row];

     //给label的内容设置字体和大小
     cell.textLabel.font = [UIFont fontWithName:self.dataArray[indexPath.row] size:20];

     cell.textLabel.textColor = [UIColor whiteColor];

     cell.backgroundColor = [UIColor clearColor];


     9).懒加载

     当用到某一个对象的时候,才创建这个对象


   - (NSArray *)dataArray
  {

   if (_dataArray == nil) {
    
    _dataArray = [NSArray array];
      }

     return _dataArray;

   }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容