UITableView

表视图的基本概念

一、表视图的介绍

1、表视图,是iOS中最重要的试图,很多应用程序都会使用到,

2、表试图里面可以放很多行信息

3、表视图的两种风格

  1)普通风格

    UITableViewStylePlain

  2)分组风格

    UITableViewStyleGrouped

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

二、表视图的基本结构

1、表视图有表头、表尾、中间一连串单元格试图组成

   1)设置表头

     tableHeaderView

   2)设置单元格试图

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

   2)设置表尾

     tableFooterView

   3) tableView的常用属性和方法


      设置表视图分割线风格

        @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;

      设置表视图分割线颜色,默认标准灰色

        @property(nonatomic,retain) UIColor *separatorColor;

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

      设置表视图的尾部视图

        @property(nonatomic,retain) UIView *tableFooterView;

      设置表视图单元格的行高

        @property(nonatomic) CGFloat rowHeight;

      设置表视图背景
  
        @property(nonatomic, readwrite, retain) UIView *backgroundView

      刷新表视图单元格中数据

        - (void)reloadData;

      显示指示条
      
        showsVerticalScrollIndicator

      设置表视图section头部行高

        @property(nonatomic) CGFloat sectionHeaderHeight;

      设置表视图section尾部部行高

        @property(nonatomic) CGFloat sectionFooterHeight

三、单元格的显示

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

     1) 不显示任何图标
    
        UITableViewCellAccessoryNone, 

     2) 跳转指示图标  

        UITableViewCellAccessoryDisclosureIndicator

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

        UITableViewCellAccessoryDetailDisclosureButton

     4) 勾选图标

         UITableViewCellAccessoryCheckmark

     5) 内容详情图标

         UITableViewCellAccessoryDetailButton 

     5) 自定义辅助图标

         accessoryView属性

3、cell的常用属性

   1)设置cell的背景试图

      backgroundView

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

      selectedBackgroundView

   3) 设置选中时的样式

      selectionStyle

   4) 设置cell上面的图片

      imageView

   5) 设置标题

    textLabel

   6) 设置描述

    detailTextLabel

   7) 设置cell右边的类型,常见的箭头等

      accessoryType

   8) 设置cell右边的视图

      accessoryView

四、数据源方法(UITableViewDatasource)

1、实例化表视图时,必须要实现他的数据源方法,以此来完成表中数据的配置,一般来说数据源方法是用来配置表中的数据

2、常用数据源方法

 1)配置section中含有行数
  
   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

 2)创建单元格实例

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;


 3) 配置表视图section个数,默认为1
   
   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

 4)section中的头部视图的标题

   - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

 5)section中的尾部视图的标题

   - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;


  /* 表视图的编辑 移动、删除等 */

 6)指定单元格是否支持编辑

   - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;

 7)指定单元格是否支持移动

   - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath;

 8)用户编辑了哪一个单元格,在这里执行删除操作

   - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath;

 9)实现此方法,移动单元格

   - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;

五、代理方法(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头部、尾部视图,注意:需要指定高度

  - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

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


 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;


 1、设置段头、段尾
 2、自定义段头段尾

表视图的属性和用法

一、表视图常用属性和方法

属性

 1、设置表视图分割线风格

   @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;

 2、设置表视图分割线颜色,默认标准灰色

   @property(nonatomic,retain) UIColor *separatorColor;

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

 4、设置表视图的尾部视图

   @property(nonatomic,retain) UIView *tableFooterView;

 5、设置表视图单元格的行高

   @property(nonatomic) CGFloat rowHeight;

 6、设置表视图背景
  
   @property(nonatomic, readwrite, retain) UIView *backgroundView

 7、刷新表视图单元格中数据
  
   - (void)reloadData;

 8、设置表视图section头部行高

   @property(nonatomic) CGFloat sectionHeaderHeight;

 9、设置表视图section尾部部行高

   @property(nonatomic) CGFloat sectionFooterHeight;

 10、 刷新表视图section中数据

   - (void)reloadSectionIndexTitles

 11、默认为NO,不可以编辑,设置时,不存在动画效果

   @property(nonatomic,getter=isEditing) BOOL editing;

 12、覆盖此方法,存在动画效果
  
   - (void)setEditing:(BOOL)editing animated:(BOOL)animated;

 13、默认为YES,当表视图不在编辑时,单元格是否可以选中

   @property(nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);

 14、默认为NO,当表视图在编辑时,单元格是否可以选中
  
   @property(nonatomic) BOOL allowsSelectionDuringEditing;

 15、默认为NO,是否可以同时选中多个单元格,注意版本问题

   @property(nonatomic) BOOL allowsMultipleSelection 

 17、 默认为NO,在编辑状态下时,是否可以同时选中多个单元格,注意版本问题

   @property(nonatomic) BOOL allowsMultipleSelectionDuringEditing  

方法

 1、指定一个cell,返回一个NSIndexPath实例,如果cell没有显示,返回nil

    - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;

 2、指定一个范围,返回一个数组,内容是NSIndexPath实例,指定rect无效,返回nil

    - (NSArray *)indexPathsForRowsInRect:(CGRect)rect;

 3、指定一个NSIndexPath,返回一个cell实例,如果cell没有显示,返回为nil

    - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;

 4、根据显示的cell,返回一组cell实例的数组,如果没有显示,返回nil

    - (NSArray *)visibleCells;

 5、根据显示的cell,返回一组NSIndexPath实例的数组,如果没有显示,返回nil

    - (NSArray *)indexPathsForVisibleRows;

 6、滑动到指定的位置,可以配置动画

    - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

 7、插入一行cell,指定一个实现动画效果

    - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

 8、删除一行cell, 指定一个实现动画效果
    
    - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

 9、刷新一个行cell,指定一个实现动画效果

    - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

 10、移动cell的位置,指定一个实现动画效果

    - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath*)newIndexPath NS_AVAILABLE_IOS(5_0);

关于UITableView的一些其它方法

去掉UITableView下边多余的线

  • (void)viewDidLoad {
    [super viewDidLoad];
    调用遮盖方法
    [self clearExtrsLine:self.tableView];
    }

  • (void)clearExtraLine:(UITableView *)ableView
    {
    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor clearColor];
    [self.tableView setTableFooterView:view];
    }

tavleView左侧空白处理

在iOS7中,UITableViewCell左侧会默认有15个像素的空白。这时候设置 setSeparatorInset:UIEdgeInsetsZero 就能将空白处去掉。
在iOS8中,设置setSeparatorInset:UIEdgeInsetsZero,已经不起作用啦。下面是解决办法;

首先在viewDidLoad方法中加入以下代码

  • (void)viewDidLoad {
    [super viewDidLoad];

    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {

      [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    

    }
    然后再UITableView的代理方法中加入以下代码
    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {

      [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    

    }

}

  • (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {

      [cell setSeparatorInset:UIEdgeInsetsZero];
    

    }

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {

      [cell setLayoutMargins:UIEdgeInsetsZero];
    

    }
    }

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

推荐阅读更多精彩内容