IOS UitableView 介绍

在众多移动应?用中,能看到各式各样的表格数据 ,

• 在iOS中,要实现表格数据展?示,最常?用的做法就是使?用UITableView

• UITableView继承?自UIScrollView,因此?支持垂直滚动,?而且性能极佳

UITableView的两种样式,一种是只有一组别,还有一种是有多个数别如下图:

如何展?示数据 ?

UITableView需要?一个数据源(dataSource)来显?示数据,

UITableView会向数据源查询?一共有多少?行数据以及每?一?行显?示什么数据等

凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源

tableView展?示数据的过程

1. 调?用数据源的下?面?方法得知?一共有多少组数据
- (NSInteger)numberOfSectionsInTableView:(UITableView

*)tableView;

2. 调?用数据源的下?面?方法得知每?一组有多少?行数据
- (NSInteger)tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section;

3. 调?用数据源的下?面?方法得知每?一?行显?示什么内容

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

当然,我们还要实现协议,不然,这些代理方法也无法使用。

property (nonatomic, assign) id <UITableViewDataSource> dataSource; UITableView

通过这3个代理方法,就可以把想要显示在页面的数据,绑定到UITableView上。

二 Cell简介

  • UITableView的每?一?行都是?一个UITableViewCell,通过dataSource的 tableView:cellForRowAtIndexPath:方法来初始化一?行
  • UITableViewCell内部有个默认的?子视图:contentView,contentView是UITableViewCell所 显?示内容的?父视图,可显?示?一些辅助指?示视图•
  • 辅助指?示视图的作?用是显?示?一个表?示动作的图标,可以通过设置UITableViewCell的 accessoryType来显?示,
  • 默认是UITableViewCellAccessoryNone(不显?示辅助指?示视图), 其他值如下:

● UITableViewCellAccessoryDisclosureIndicator

● UITableViewCellAccessoryDetailDisclosureButton

● UITableViewCellAccessoryCheckmark

• 还可以通过cell的accessoryView属性来?自定义辅助指?示视图 

UITableViewCell的contentView

• contentView下默认有3个?子视图

其中2个是UILabel(通过UITableViewCell的textLabel和detailTextLabel属性访问)

第3个是UIImageView(通过UITableViewCell的imageView属性访问)

UITableViewCell还有?一个UITableViewCellStyle属性,?用于决定使?用contentView的 哪些?子视图,以及这些?子视图在contentView中的位置

Cell的重?用原理

• iOS设备的内存有限,如果?用UITableView显?示成千上万条数据,就需要成千上万 个UITableViewCell对象的话,那将会耗尽iOS设备的内存。

要解决该问题,需要重 ?用UITableViewCell对象

• 重?用原理:当滚动列表时,部分UITableViewCell会移出窗??口,UITableView会将窗??口外 的UITableViewCell放?入?一个对象池中,等待重?用。

当UITableView要求dataSource返回 UITableViewCell时,dataSource会先查看这个对象池,

如果池中有未使?用的 UITableViewCell,dataSource会?用新的数据配置这个UITableViewCell,

然后返回给 UITableView,重新显?示到窗??口中,从?而避免创建新对象

• 还有?一个?非常重要的问题:有时候需要?自定义UITableViewCell(?用?一个?子类继 承UITableViewCell),

?而且每?一?行?用的不?一定是同?一种UITableViewCell,所以?一 个UITableView可能拥有不同类型的UITableViewCell,

对象池中也会有很多不同类型的 UITableViewCell,那么UITableView在重?用UITableViewCell时可能会得到错误类型的 UITableViewCell

• 解决?方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始

化UITableViewCell的时候传?入?一个特定的字符串标识来设置reuseIdentifier(?一般 ?用UITableViewCell的类名)。

当UITableView要求dataSource返回UITableViewCell时,先 通过?一个字符串标识到对象池中查找对应类型的UITableViewCell对象,

如果有,就重 ?用,如果没有,就传?入这个字符串标识来初始化?一个UITableViewCell对象

Cell的重?用代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
{
?// 1.定义?一个cell的标识
static NSString *ID = @"mjcell";
// 2.从缓存池中取出cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 3.如果缓存池中没有cell if (cell == nil) {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:ID];
}
// 4.设置cell的属性... return cell;
}

时间: 2024-10-10 20:25:04

IOS UitableView 介绍的相关文章

ios UItableView,UITableViewHeaderFooterView分组头部的重用机制,简单地仿射变换CGAffineTransform

怎样设置包括第一栏在内相同高度的section(小技巧,虽然容易但容易忽略) *第一步,在viewdidload里将尾部设为0,table.sectionFooterHeight = 0;(代理方法)- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0; }虽然也可以设置尾部高度,但是设置后没有效果 第二步,调用tableView的代理方法- (CGF

IOS UITableView NSIndexPath属性讲解

IOS UITableView NSIndexPath属性讲解 查看UITableView的帮助文档我们会注意到UITableView有两个Delegate分别为:dataSource和delegate. dataSource 是UITableViewDataSource类型,主要为UITableView提 供显示用的数据(UITableViewCell),指定UITableViewCell支持的编辑操作类型(insert,delete和 reordering),并根据用户的操作进行相应的数据更

iOS SDK 介绍及导入

iOS SDK 介绍 环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架.包括以下几个部分: SDK_Core: 为核心的消息同步协议实现,完成与服务器之间的信息交换. SDK: 是基于核心协议实现的完整的 IM 功能,实现了不同类型消息的收发.会话管理.群组.好友.聊天室等功能. EaseUI: 是一组 IM 相关的 UI 控件,旨在帮助开发者快速集成环信 SDK. 用户可以基于我们提供的 Demo 实现自己的应用,也可以基于 SDK 开发自己应用. SDK 采用模块化设计,每

iOS——UITableView数据源的一些问题

UITableView数据源的问题"name=image_operate_1771416366029362alt="iOS UITableView数据源的问题"src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif"real_src="http://s15.sinaimg.cn/bmiddle/002WA StNzy6NJcgxGSafe&690">

IOS UItableView得group风格如何去掉分割线问题

在自定义UItableView的时候,当选择的style为Group时,往往在设置透明后分割线还在,为了去除,只要重新设置一个BackgroundView覆盖掉原来的即可 //取消分割线 UIView *view= [ [ [ UIView  alloc ] init ] autorelease]; [cell setBackgroundView :view]; //取消点击效果 cell.selectionStyle = UITableViewCellSelectionStyleNone; I

IOS UITableView Group&amp;Section

UItableView 根据数据结构不同 会有不同样式 关键在两个代理 tableviewdelegate&tabledatasourse 下面代码是我实施的Group 在模拟器中 ios6.1和ios7 并且滚动后相应的section会“置顶”,效果不错哦! 核心代码: #import <UIKit/UIKit.h> @interface AnnouncementViewController : UIViewController<UITableViewDataSource,UI

ios UITableView 相关

tableView 实现的方法 无分组的cell #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRow

iOS UITableView划动删除的实现

标签:划动删除 iphone 滑动删除 ios UITableView 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rainbird.blog.51cto.com/211214/634587 从七八月前对苹果一无所知,到现在手持iphone,ipad,itouch有三个线上成熟app并熟练开发ios应用.一路走来一直站在前辈的肩膀上不断进步.如今生活工作稳定是时候将一直以来的一些心得整理出来了.想来想去决定先说说UITab

iOS框架介绍

iOS框架介绍 Cocoa Touch GameKit  实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息 iOS设备之间蓝牙数据传输   从iOS7开始过期   局域网游戏  http://www.cnblogs.com/KidReborn/archive/2011/10/17/2215641.html iAd     用来在应用中提供广告条 广告条与用户UI视图进行合并,与苹果的iAd服务一起工作,自动处理.加载和呈现富媒体广告以及应答在那些广告条上的点击等所有相关的工作.htt