表视图(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];
return row;
}

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

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

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

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

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

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

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

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

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

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
//第一个分区标题为"亚洲",第二个分区标题为"欧洲"
if(section==)
{
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==)//第一个分区
{
if(indexPath.row==)
{
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"];
} return cell;
}

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

tableView:didSelectRowAtIndexPath: 与 tableView:didDeselectRowAtIndexPath

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

表视图(UITableView)与表视图控制器(UITableViewController)的更多相关文章

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

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

  2. 视图交互--表视图(UITableView)的cell交互析略

    在表视图UITableView的cell上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范.总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用.用一个简单的例子来举例说明一下,其他 ...

  3. IOS 表视图UITableView 束NSBundle

    今天搞了一下表视图UITableView 表视图是在以后应用程序开发中经常用到的一个视图,所以必须要熟练掌握 所获不多,对视图有了一个大概的了解 其中有用到NSBundle , 束   这个类 先说一 ...

  4. IOS开发中UITableView(表视图)的滚动优化及自定义Cell

    IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...

  5. iOS开发-在表单元中添加子视图

    #import <UIKit/UIKit.h> @interface NameAndColorCellTableViewCell : UITableViewCell @property(c ...

  6. SQL视图和多表连接

    本篇博客关注的焦点是视图的使用以及视图和多表连接的配合.以便可以了解视图,以及更好的使用视图. 首先,还是要说明一下视图的定义:视图是基于SQL语句的结果集的可视化虚拟表,换句话说视图就是SQL查询结 ...

  7. mssql sqlserver 表增加列后,视图不会自动更新相关列的两种解决方法分享

    摘要: 今天对物理数据表,进行增加列操作后,程序一直显示无法找到相应列,通过仔细比对发现,视图中无相应列更新,下文将具体的解决方法分享如下: 例: create view vw_test as sel ...

  8. mysql 视图 安全性( mysql 表能读,但是视图不能读问题 )

    安全性: 有两个选项 Definer:定义者 , 定义者有什么权限 ,访问视图的人就有什么权限 Invoker: 调用者  ,根据调用这个视图的当前用户来决定 有什么权限 采坑: 项目中有个复杂查询. ...

  9. Sql Server 数据库表结构,存储过程,视图比较脚本

    顶级干货 用来比较两个数据库之间 表结构,存储过程及视图差异的存储过程,直接复制对应的存储过程,无需改动,直接在数据库中执行(传递要比较的数据库参数)即可 1.两个数据库之间存储过程及视图差异比较的存 ...

随机推荐

  1. HDU 1299 基础数论 分解

    给一个数n问有多少种x,y的组合使$\frac{1}{x}+\frac{1}{y}=\frac{1}{n},x<=y$满足,设y = k + n,代入得到$x = \frac{n^2}{k} + ...

  2. DevExpress使用教程:GridView经验小结(官方中文文献经典资料技巧)

    下面是笔者自己总结的使用 DevExpress Gridview 的一些经验小结,分享给大家: 1.去除 GridView 头上的 "Drag a column header here to ...

  3. 更改gradle的java的class文件输出目录的结构

    group 'com.thinkvenus.common'version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 r ...

  4. form表单设置input文本属性只读,不可更改

    记住一条好用的,设置readonly属性为true <input     readonly=''true"> 更多方法,转载: http://www.jb51.net/web/6 ...

  5. Please move or remove them before you can merge

    在使用git pull时,经常会遇到报错: Please move or remove them before you can merge 这是因为本地有修改,与云端别人提交的修改冲突,又没有merg ...

  6. Name That Number 命名那个数字

    1.2.3 Name That Number 命名那个数字 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 183  Solved: 33[Submit][ ...

  7. 2008 Round 1A C Numbers (矩阵快速幂)

    题目描述: 请输出(3+√5)^n整数部分最后3位.如果结果不超过2位,请补足前导0. 分析: 我们最容易想到的方法肯定是直接计算这个表达式的值,但是这样的精度是不够的.朴素的算法没有办法得到答案.但 ...

  8. 2018中国科大自主测试-B卷部分试题

    数学部分 z = e^{\frac{2i\pi}{3}}, 求z^{2018}. \sin(2x) = \frac 35, 求\frac{\tan(x+15^{\circ})}{\tan(x-15^{ ...

  9. 详解H5中的history单页面,手动实现单页面开发,细说h5单页面原理

    就目前来看,前端的单页面开发占了很大一部分,一方面无刷新的切换增强了体验,并且浏览器记录依然存在,前进后退都没问题,在之前我们通地址栏中的hash改变来触发onhashchange方法来实现单页面应用 ...

  10. 一款基于react-native的弹窗提示组件

    介绍一款基于react-native的弹窗提示插件 react-native-ms , github地址:https://github.com/jiangzhenfei/react-native-ms ...