列表显示,顾名思义它是在一个列表视图的形式显示在屏幕上的数据的内容。于ios在列表视图UITableView达到。这个类在实际应用中频繁,是很easy理解。这里将UITableView的主要使用方法总结一下以备查。

UITableView定义在头文件UITableView.h中,详细的定义能够查看官方文档;从定义中能够看出,UITableView继承自UIScrollView类,因此在支持方便地显示列表数据的同一时候,还天生支持垂直滚动操作。

组成列表的每个元素称为UITableViewCell实例。

一个UITableViewCell也是应用很广泛的类,定义可见官方文档

在详细的使用过程中,能够创建一个独立的UITableView,也能够直接创建一个UITableViewController。这里主要记录创建UITableView的方法,下篇记录通过列表视图控制器使用UITableView。

UITableView类中定义了style属性:

@property(nonatomic, readonly) UITableViewStyle style

每个UITableView都能够选择两种style之中的一个。即分组模式和平面模式。这两种模式定义在枚举变量UITableViewStyle中:

typedef enum {
UITableViewStylePlain,
UITableViewStyleGrouped
} UITableViewStyle;

每个列表视图的组成都是相似的,都是由一个表头视图+表体+表尾视图构成。当中表头和表尾两个视图默觉得nil。须要时能够创建自己定义视图加入到表头和表尾。定义例如以下:

@property(nonatomic, retain) UIView *tableHeaderView;
@property(nonatomic, retain) UIView *tableFooterView;

除表头和表尾之外,表体则由一串UITableViewCell(以下简称cell)构成。假设是分组表视图。则多个UITableViewCell构成一个section,每一个section也有头和尾视图。

以下简单新建一个demo展示一下怎样创建一个UITableView。

这里假定大家都了解xcode的基本操作,所以就不再一步一步地截图了,简单叙述就可以。不懂得能够去百度一下“xcode新建project”。

新建一个single view application。在新生成的ViewController.m文件里重写loadView方法,新建一个UITableView视图。

(别忘了把alloc的视图在dealloc函数中释放。)

- (void)loadView
{
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height; UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width,height)];
self.view = backgroundView; _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, width, height) style:UITableViewStylePlain];
[self.view addSubview:_tableView];
[_tableView release];
}

编译执行。显演示样例如以下图:

表视图的协议方法——这是很重要的部分,由于我们创建一个表视图,目的就是让视图能够显示数据,否则一个空空的表视图与废物无二。表视图所定义的协议方法由代理方法delegate和数据源方法data source方法组成。

托付方法一般用于实现个性化处理表视图的基本样式(如单元格的高度等)以及捕捉单元格选中的响应。数据源方法用于完毕表中的数据。如指定单元格数。以及创建每个单元格。

要实现代理和数据源方法。首先须要让当前视图控制器支持UITableViewDelegate和UITableViewDataSource协议。做例如以下改动:

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>

而且在tableView创建完毕后,将tableView的delegate和dataSource设置为self,即托付给当前视图控制器来控制表视图的数据显示和响应。

_tableView.delegate = self;
_tableView.dataSource = self;

delegate和data source协议有两个方法是必须实现的:

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

这两个方法分别用于生成每个cell。以及指定当前section共同拥有多少行。

实现这两个方法是想要在表视图中显示数据必须实现的最低要求。

我们在视图控制器头文件里声明一个NSArray *model(retain属性),并在viewDidLoad中将[UIFont familyNames]赋给这个属性。

在视图控制器中实现这两个代理方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_model count];
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identify = @"TableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify]; if (nil == cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify];
cell.textLabel.text = self.model[indexPath.row];
} return cell;
}

在cellForRowAtIndexPath方法中,首先会检查是否有闲置的单元格,假设没有闲置的单元格。则会新建一个cell并将其返回。參数indexPath表示眼下正在创建的单元格位于整个表视图的第几行。

编译。执行,显示结果:

假设希望实现对选中某个单元格的响应,仅仅须要实现以下代理方法就可以。在代理方法中能够实现创建新的视图控制器并控制其载入到屏幕上。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

版权声明:本文博主原创文章,博客,未经同意不得转载。

【iOS7一些总结】9、与列表显示(在):列表显示UITableView的更多相关文章

  1. 17秋 软件工程 团队第五次作业 Alpha 测试报告

    用户反馈博客:17秋 软件工程 团队第五次作业 Alpha 用户反馈 团队项目软件的总体测试计划 测试模块: 用户登录 部门信息模块 活动模块 部员管理模块 短信通知模块 测试计划: 注:测试结果Y代 ...

  2. 【JavaScript】checkBox的多选行<tr>信息获取

    页面的列表table显示(后台model.addAttribute("page", page);传来page信息,page通过foreach标签迭代展示表格数据): <!-- ...

  3. IOS开发之控件篇UITabBarControllor第二章 - 遮掩TableView问题

    在IOS7.0以后UITabBar 里面放入一个UITableView会出现一个问题,Table会被TabBar掩盖了,当移动到最后一项的时候,永远看不到,如下面的例子,总共是99项,但是只能显示到9 ...

  4. UITableView分隔线

    问题1: 在ios中使用UITableView时,当行数较少是,可能一屏幕能显示完全所有行,这时候会出现下面的问题,显示多余的分隔线 图如下: 解决方案: //解决方案1 //添加如下代码 -(CGF ...

  5. ECSHOP后台商品列表显示商品缩略图

    ECSHOP后台商品列表显示商品缩略图 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2013-11-06   ecshop 后台商品列表显示商品缩略图,大楷步凑如下: ...

  6. Android开发之扫描附近wifi热点并列表显示

    近期项目中用到了wifi模块.今天做一个简单的总结. 參考:http://www.2cto.com/kf/201310/253617.html 1.如何获取wifi对象并进行操作 要操作WIFI设备, ...

  7. ThinkPHP中 按条件查询后列表显示

    最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题. 在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign ...

  8. android wifi讲解 wifi列表显示

    1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这 ...

  9. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

随机推荐

  1. hdu 4465 Candy(2012 ACM-ICPC 成都现场赛)

    简单概率题,可以直接由剩余n个递推到剩余0个.现在考虑剩余x个概率为(1-p)的candy时,概率为C(2 * n - x, x) * pow(p, n + 1)  *pow(1 - p, n - x ...

  2. 【VMware混合云】掀起你的盖头来

    作者:范军 (Frank Fan) 新浪微博:@frankfan7   微信:frankfan7 VMware混合云服务(vCHS)预计在2013年8月23日正式面向用户推出.目前开放服务的四个数据中 ...

  3. Java 理论与实践: 处理 InterruptedException(转)

    很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为它是一个检查异常(check ...

  4. TCP header

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vzc2VyNDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  5. Oracle错误——ORA-03113:在通信信道文件的末尾 解决方案

    起源 今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误"ORA-01034"和"ORA-27101"如图: 然后就就通过命令提示符去登陆Oracle, ...

  6. C语言获取文件SHA1哈希

    安全散列算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)它定义了数字签名算法(Digital Signatur ...

  7. HTML5 RPG游戏引擎 地图实现篇

    一,话说全国年夜事   前没有暂看到lufy的专客上,有一名伴侣念要一个RPG游戏引擎,出于兴趣筹办入手做一做.因为我研讨lufylegend有冶时间了,对它有必然的依赖性,因而便筹办将那个引擎基于 ...

  8. 安装好.net framework后运行慢

    表现 系统有时运行慢,尤其是.net程序运行得相当慢 mscorsvw.exe与mscorsvw.exe *32两个进程挂在任务管理器里时不时地占着CPU 解决 运行以下两条命令,加快这两进程的运行, ...

  9. 设计模式C++达到 3.抽象工厂

    简单工厂模式和工厂模式 要求 同类型的产品子类有共同的方法.这限制了产品子类的扩展.抽象工厂能client它提供了一个接口,它是client而不必指定产品的详细信息.创建多个产品系列产品对象.在归为一 ...

  10. 这么多的技术,作为一个freshman,什么研究?

    科学技术,从哪里学习?        杨问了我几个最近:"如何学习技术?".说实话,其实,我自己只是一个资深兄弟.对于这个答案.这是更难以在本身回答. 可是.既然比师弟们多吃了几年 ...