表视图(UITableView)与表视图控制器(UITableViewController)其实是一回事。 表视图控制器是一种只能显示表视图的标准视图控制器,可在表视图占据整个视图时使用这种控制器。虽然如此,相对于使用标准视图控制器并自行添加表视图,使用表视图控制器除了将自动设置委托和数据源属性外,没有任何其它的优势。

对于表视图,最基本的设置是Content(内容)属性,它包含两个值:Static Cells和Dynamic Prototypes。Static Cells用来显示固定的单元格,内容呈现主要通过Xcode的可视化编程来实现,不需要额外的代码支持。Dynamic Prototypes为动态单元格,通过设定一个Cell模板,然后通过实现datasource接口和delegate接口的一些关键方法,从而动态生成表视图。

需要注意的是,Static Cells模式仅仅适用于表视图控制器(UITableViewController),当你尝试设置标准视图控制器下的表视图(UITableView)content为Static Cells时,Xcode将提示一个错误:Static table views are only valid when embedded in UITableViewController instances。

表视图有两种外观(Style):Plain和Grouped。下图演示了这两种样式的差异:

Plain:

Grouped:

Separator属性用于指定分区之间的分隔线外观,它包含两个下拉列表,一个用来设置分割线的外观,有3个值:None(无分割线)、Single Line(单线条)、Single Line Etched(带浮雕效果的线条);另一个用来设置线条的颜色。

Selection、Editing以及Show Selection on Touch复选框用于设置表格被用户触摸时的行为。

Index Row Limit属性与UITableView的sectionIndexMinimumDisplayRowCount有关,这个属性的含义是:"当行数达到某个数值,则显示索引栏"。(索引栏是通过sectionIndexTitlesForTableView方法来实现的)

每个单元格(Cell)都有独特的标识符。这种标示符被称为重用标识符(reuse identifier),用于在编码时引用单元格;例如在Dynamic Prototypes模式下,可以指定多个Cell模板,为每个模板命名不同的标示符,然后根据情况调用不同的Cell模板。

单元格的Style属性有下列五种:

Custom -- 用户自定义
Basic -- 只包含一个Title
Right Detail --包含一个Title,并且在右侧显示Detail
Left Detail -- 包含一个Title,并且在左侧显示Detail
Subtitle -- 包含一个Title,并且在Title的下方显示Detail

Basic、Right Detail和Subtitle有一个Image属性,可以选择任意一张图片来添加图像,这里只是用作占位。

下拉列表Selection用于设置单元格被选中时的颜色。只有三个值供选择:None、Blue、Gray。

下拉列表Accessory用于设置单元格右边的附属图形(通常是展开箭头)。有四个值:None、Disclosure Indicator、Detail Disclosure、Checkmark。

Indentation设置栏包括Level和Width输入框,分别对应indentationLevel(缩进等级)和indentationWidth(缩进宽度),最终的索引值=缩进等级*缩进宽度。缩进等级默认值为0(没有缩进),缩进宽度默认值为10points。一般不直接设置缩进等级,而是根据行索引返回值:

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{NSUInteger row=[indexPath row];returnrow;
}

Indent while editing复选框应该是“编辑状态下缩进”(取消选择,编辑状态下可能就不缩进了,留待以后验证)。

Shows Re-order Controls复选框应该是“显示Re-order Controls",Re-order Controls是编辑状态下出现的一系列控件。

要想让表视图正常工作,需要遵守两个协议--UITableViewDataSource与UITableViewDelegate。

UITableViewDataSource(数据源协议)需要实现的主要方法:

numberOfSectionsInTableView: -- 返回表视图的分区数。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{//返回了2个分区return 2;
}

tableView:numberOfRowsInSection: -- 返回给定分区包含多少行。分区索引从0开始。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{//第一个分区返回2行,第二个分区返回5行if(section==0){return 3;}else if(section==1){return 5;}return 0;
}

tableView:titleForHeaderInSection: -- 返回一个字符串,用于给定分区的标题。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{//第一个分区标题为"亚洲",第二个分区标题为"欧洲"if(section==0){return @"亚洲";}else{return @"欧洲";}
}

tableView:cellForRowAtIndexPath: -- 返回一个单元格对象,用于显示在表视图的指定位置。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{//UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"mycell"];
UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:@"mycell"];if(indexPath.section==0)//第一个分区
{if(indexPath.row==0){cell.textLabel.text= @"第一分区第一行";cell.detailTextLabel.text= @"section1 row1";cell.imageView.image= [UIImage imageNamed:@"s1r1.gif"];}else{cell.textLabel.text= @"第一分区其它行";cell.detailTextLabel.text= @"section1 rowX";cell.imageView.image= [UIImage imageNamed:@"s1rx.gif"];}}else//其它分区
{cell.textLabel.text= @"其它分区其它行";cell.detailTextLabel.text= @"sectionX rowX";cell.imageView.image= [UIImage imageNamed:@"sxrx.gif"];}returncell;
}

UITableViewDelegate(委托协议)主要响应用户在表视图进行的操作,最基础的是用户触摸单元格:

tableView:didSelectRowAtIndexPath: 与 tableView:didDeselectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"you selected section %d row %d",indexPath.section,indexPath.row);
}

转载于:https://www.cnblogs.com/CoderWayne/p/3596808.html

表视图(UITableView)与表视图控制器(UITableViewController)相关推荐

  1. IOS开发之表视图(UITableView)

    IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...

  2. oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息

    查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * fr ...

  3. informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务

    一.视图 视图(view),称为虚表,在数据库中不存在实体. 视图本质上是对物理表(基表)的一种数据保护.让开发者或者用户只能看到基表中的部分数据. 1.1 创建视图 创建视图的语法 1.2 使用视图 ...

  4. oracle 物化视图、中间表的方案

    物化视图 有个项目因为有比较多的查询汇总,考虑到速度,所以使用了物化视图.简单的把用到的给整理了下.先看简单创建语句: create materialized view mv_materialized ...

  5. 梦幻,MySQL视图,虚实表,完整详细可收藏

    文章目录 1. 数据库对象 2. 视图概述 3. 创建视图 4. 查看视图 5. 更新视图的数据 6. 修改.删除视图 7. 总结 1. 数据库对象 2. 视图概述 2.1 为什么使用视图? 视图一方 ...

  6. GaussDB(DWS)应用实战:对被视图引用的表进行DDL操作

    摘要:GaussDB(DWS)是从Postgres演进过来的,像Postgres一样,如果表被视图引用的话,特定场景下,部分DDL操作是不能直接执行的. 背景说明 GaussDB(DWS)是从Post ...

  7. odoo10参考系列--视图二(表单视图)

    表单视图 表单视图用于从单个记录中显示数据.它们的根元素是<form>.它们由常规HTML组成,具有额外的结构和语义组件. 结构组件 结构组件提供了结构化的或很小逻辑的"视觉&q ...

  8. 增强的PolyBase SQL 2019-外部表SQL Server,目录视图和下推式

    This article is part 4 of the series for SQL Server 2019 Enhanced PolyBase. Let quickly recap the pr ...

  9. 1.19.5.3.时态表、关联一张版本表、关联一张普通表、时态表、声明版本表、声明版本视图、声明普通表、时态表函数等

    1.19.5.3.时态表(Temporal Tables) 1.19.5.3.1.设计初衷 1.19.5.3.1.1.关联一张版本表 1.19.5.3.1.2.关联一张普通表 1.19.5.3.2.时 ...

最新文章

  1. Android 中文API(86)——ResourceCursorAdapter
  2. mikrotik ros ***借线
  3. !亲测有效!质量最高的pr模板网站,有点小贵罢了
  4. 在Windows使用git工具将代码同步至github(作者:ying1989920)
  5. linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
  6. 对象流 ObjectInputStream java
  7. CheckBox的Attributes
  8. iQOO5G手机卡槽公布
  9. nodejs 服务端 音频拼接 合成 实现
  10. 浪曦大型企业门户综合项目的设计、实施与管理实地培训班隆重开班招生中……
  11. python 饼图笔记 两个饼图 双饼图 复合饼图 两个饼图 环形图
  12. jedis pool的问题
  13. Scratch中做一个简单迷宫小游戏,值得您收藏!
  14. 手机QQ后台清理不掉的秘密——anddroid悬浮窗
  15. php class中public,private,protected的区别以及实例分析
  16. 云服务器的使用(一)
  17. python中reversed与reverse的区别
  18. idea String报错问题
  19. JQJQJQJQdefferd详解
  20. 直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析(二)

热门文章

  1. 兴致勃勃的意思是什么,怎么用兴致勃勃造句?
  2. 老板必须亲自抓销售,公司越小越如此
  3. 如果你负债累累,上班已经不能还账,又没有创业资金,该怎么办?
  4. sql stuff 函数_SQL STUFF函数概述
  5. mercurial和svn_DBA Mercurial简介–处理文件和更改
  6. 利用T-SQL动态定义重复SQL Server数据库表行
  7. centos升级内核之后修改内核启动顺序
  8. css元素穿透。 pointer-events: none;
  9. CF 799B T-shirt buying
  10. 设计模式之原型模式(Prototype)