UITableView的基本使用

在iOS开发中,UITableView是使用非常 广泛的控件,我们平时使用的很多软件中到处都可以看到它的影子,常见的像手机中的设置,生活中的QQ,微信等,都可以使用UITableView来实现。下面就简单的说明一下UITableView的一些特性和使用方式。

一:什么是UITableView

1.UITableView继承自UIScrollView,所以可以滚动(只支持垂直滚动)查看里面展示的内容。在iOS开发中,UITableView是展示大量内容的首选

2.一般来说进行大量的有规则排列的数据首先考虑使用UITableView

3.UITableView具有重用和延迟加载等特性,可以有效的提高效率(它并不会一次性的将所有数据进行加载,而只是加载当前视图中可见的数据)

4.UITableView的每一行数据就是一个UITableViewCell,UITableView只能有一列数据(cell),且只支持纵向滑动,当创建好的tablView第一次显示的时候,我们需要调用其reloadData方法,使tableView的数据更新到最新状态。

二:UITableView的几个重要属性

1.datasource:是UITableViewDataSource类型,主要为UITableView提供显示用的数据,指定UITableViewCell支持的编辑操作类型(insert,delete和reordering),并根据用户的操作进行相应的数据更新操作

2.delegate:是UITableViewDelegate类型,主要提供一些可选的方法,用来控制tableView的选择、指定section的头和尾的显示

3.rowHeight:设置每一行数据的高度

4.UITableView的style属性:

    a)plain:不分组,所有数据都属于同一个组

    b)grouped:分组,会显示有默认的头部块和底部块

    c)这里说明 一下style属性的设置,如果是手动拖拽控件的方式添加UITableView,那么只能通过style属性进行设置,如果是代码创建UITableView,那么可以在创建的时候调用initWithFrame:<#(CGRect)#> style:<#(UITableViewStyle)#>来进行style的设置。


一般情况下我们会设置当前控制器为UITableView的datasource和delegate,理由:根据MVC设计模式,view是与controller进行交互的。而UITableView是View,UIViewController是Controller,所以展示数据的view需要数据就会调用controller的数据源方法获取数据,而不会去关注数据如何获取。简单的说,在UITableView中,在要展示数据的时候,就会询问它的数据源到底需要显示多少组数据,每一组数据中有几行数据,每一行数据具体的内容是什么,控制器就负责实现这些方法,而UITableView只负责显示。控制器负责获取数据,UITableView负责展示,这就是mvc的好处。


三:UITableView常用数据源方法

在展示大量数据的时候我们需要考虑:1.全部的数据一共可以分为多少组2.每一组有多少条数据3每一条数据的具体内容是什么。基于这三点我们需要掌握下面数据源方法

1.-(NSInteger)numberOfSectionsInTableView:(UITableView

*)tableView:这个方法用来确定当前UITableView一共有几组数据,如果没有实现这个数据源方法,那么系统默认只有一组数据,也就意味着这个方法默认返回1.如果有多组数据,那么就需要在这个方法里面进行确定。

2.-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section:这个方法确定在对应的组中有几条(行)数据,必须在实现这个方法,否则数据无法显示。当每一次创建组的时候都会调用这个方法确定该组的数据行数量。

3.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;这个方法确定某个组中某一行显示的具体的内容,在UITableView中,真正的数据显示在cell中,所以为cell的某些属性赋值才能真正的让数据展示出来。在创建每一组每一行显示的数据的时候都会调用这个方法,这是必须实现的方法。

4.- (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section:设置头部文本,返回默认样式的文本

5. - (NSString*)

tableView:(UITableView*)tableViewtitleForFooterInSection:(NSInteger)section:设置底部文本,返回默认样式的文本。

四:系统自定义cell的三个默认成员:

a)imageView:默认在最左边显示的小图像,可以不设置,如果没有则不显示图片

b)textLabel:显示的文本,一般情况下显示的文本都是使用这个属性

c)detailTextLabel:显示的详细介绍,一般字体大小比textLabel小,如果不设置则不显示。

d)图示:


五:UITableViewCell的样式(style)

这是一个只读属性,只有在创建的时候可以设置。

a)UITableViewCellStyleDefault:该格式提供了一个简单的左对齐的文本标签textLabel和一个可选的图像imageView。如果显示图像,那么图像将在最左边。这种格式虽然可以设置detailTextLabel,但是不会显示该标签。

b)UITableViewCellStyleSubtitle:该格式与前一种相比,增加了对detailTextLabel的支持,该标签将会显示在textLabel标签的下面,字体相对较小。

c)UITableViewCellStyleValue1:该格式居左显示textLabel,居右显示detailTextLabel,且字体较小

d)UITableViewCellStyleValue2:该格式居左现实一个小型蓝色主标签textLabel,在其右边显示一个小型黑色副标题详细标签detailTextLabel,该格式不支持图像

e)图例:


六:UITableViewCell的accessoryType属性

a)UITableViewCellAccessoryNone;//cell没有任何的样式

b)UITableViewCellAccessoryDisclosureIndicator;//cell右边有一小箭头,距离右边有十几像素

c)UITableViewCellAccessoryDetailDisclosureButton;//cell右边有一蓝色的圆形button和一个>

d)UITableViewCellAccessoryDetailButton://cell右边有一个小圆圈,里面有倒立的叹号

e)UITableViewCellAccessoryCheckmark;//cell右边的形状是对号


七:cell的优化:

a)为什么需要优化:iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象

b)优化原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象,这就节省了创建新对象的时间,也避免了反复的内存分配及开销。

c)如何进行cell的重用:可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象,以便下一次重用。

八:重用案例示例:

//数据源方法:创建cell

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

{

//定义重用标识

NSString*ID=@"hero";

//从缓存中创建cell,而不是直接创建一个新的cell,查找缓存,如果缓存中存在可被重用的cell,那么就不会再重新创建cell,避免了反复的创建和回收,节省资源

UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:ID];

//缓存中有可能并不存在可被重用的cell(如第一次创建的时候),所以判断如果没有从缓存中获取可重用的cell,那么就创建一个新的cell

if(cell==nil)

{

//创建cell样式选择UITableViewCellStyleSubtitle的原因是还需要显示图片和详细说明信息reuseIdentifier是为当前创建的cell设置标识,方便下一次的重用

cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:ID];

}

//创建cell后为cell赋值

//获取模型数据

WHHero*hero=self.heros[indexPath.row];

//设置图像

cell.imageView.image=[UIImageimageNamed:hero.icon];

//设置文本

cell.textLabel.text=hero.name;

//设置详细说明信息文本

cell.detailTextLabel.text=hero.intro;

//返回创建好的cell

returncell;

}


UITableView还有一些常用的代理方法,用于数据的相关操作,之后的文章里会做出说明。

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

推荐阅读更多精彩内容