表视图(UITableView)与表视图控制器(UITableViewController)
表视图(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)相关推荐
- IOS开发之表视图(UITableView)
IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...
- oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息
查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * fr ...
- informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务
一.视图 视图(view),称为虚表,在数据库中不存在实体. 视图本质上是对物理表(基表)的一种数据保护.让开发者或者用户只能看到基表中的部分数据. 1.1 创建视图 创建视图的语法 1.2 使用视图 ...
- oracle 物化视图、中间表的方案
物化视图 有个项目因为有比较多的查询汇总,考虑到速度,所以使用了物化视图.简单的把用到的给整理了下.先看简单创建语句: create materialized view mv_materialized ...
- 梦幻,MySQL视图,虚实表,完整详细可收藏
文章目录 1. 数据库对象 2. 视图概述 3. 创建视图 4. 查看视图 5. 更新视图的数据 6. 修改.删除视图 7. 总结 1. 数据库对象 2. 视图概述 2.1 为什么使用视图? 视图一方 ...
- GaussDB(DWS)应用实战:对被视图引用的表进行DDL操作
摘要:GaussDB(DWS)是从Postgres演进过来的,像Postgres一样,如果表被视图引用的话,特定场景下,部分DDL操作是不能直接执行的. 背景说明 GaussDB(DWS)是从Post ...
- odoo10参考系列--视图二(表单视图)
表单视图 表单视图用于从单个记录中显示数据.它们的根元素是<form>.它们由常规HTML组成,具有额外的结构和语义组件. 结构组件 结构组件提供了结构化的或很小逻辑的"视觉&q ...
- 增强的PolyBase SQL 2019-外部表SQL Server,目录视图和下推式
This article is part 4 of the series for SQL Server 2019 Enhanced PolyBase. Let quickly recap the pr ...
- 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.时 ...
最新文章
- Android 中文API(86)——ResourceCursorAdapter
- mikrotik ros ***借线
- !亲测有效!质量最高的pr模板网站,有点小贵罢了
- 在Windows使用git工具将代码同步至github(作者:ying1989920)
- linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
- 对象流 ObjectInputStream java
- CheckBox的Attributes
- iQOO5G手机卡槽公布
- nodejs 服务端 音频拼接 合成 实现
- 浪曦大型企业门户综合项目的设计、实施与管理实地培训班隆重开班招生中……
- python 饼图笔记 两个饼图 双饼图 复合饼图 两个饼图 环形图
- jedis pool的问题
- Scratch中做一个简单迷宫小游戏,值得您收藏!
- 手机QQ后台清理不掉的秘密——anddroid悬浮窗
- php class中public,private,protected的区别以及实例分析
- 云服务器的使用(一)
- python中reversed与reverse的区别
- idea String报错问题
- JQJQJQJQdefferd详解
- 直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析(二)