`

iOS开发那些事--简单表视图

阅读更多

表视图是iOS开发中使用最频繁的视图,我们一般都会选择以表的形式来展现数据,比如通讯录、频道列表等。表视图分段、分组、索引等功能使我们所展 示的数据看起来更规整更有调理,更令人兴奋的是表视图还可以利用细节展示等功能多层次的展示数据,正所谓一表胜千言。 不过,相较于其它控件表视图的使用比较复杂,但是对比于表视图各种灵活多变的功能,我们在使用上花费的努力还是相当值得的。

 

 

 

简单表视图

 

表视图的形式灵活多变,本着由浅入深的原则,我们先从简单表视图开始学习。本节讲的简单表视图是动态表,(iOS 5之前全部是动态表没有动态表和静态表区别)。

 

创建简单表视图

 

在iOS 5之后我们可以使用xib或者故事板技术创建表视图,要显示的是一个最基本的表,我们只需实现UITableViewDataSource协议中必须要实 现的方法即可,分别是tableView:numberOfRowsInSection:和 tableView:cellForRowAtIndexPath:就可以了。:

 

5-16

 

构造方法initWithFrame:style:是在实例化表视图的时候调用,如果采用xib或故事板来设计表视图,那么表视图的创建是在实例化 表视图控制器的时候完成的,表视图显示的时候会发出tableView:numberOfRowsInSection:消息询问当前节中的行数,表视图单 元格显示的时候会发出tableView:cellForRowAtIndexPath:消息为单元格提供显示数据。

 

我们创建一个简单表视图,单元格使用默认样式,有图标和主标题,显示的是世界杯球队的信息。

 

 5-17

 

使用“Single View Application”模板创建一个工程,工程名为“SimpleTable”,打开IB设计画面,在“View Controller Scene”选中“View Controller”删除控制器,然后从控件库中拖拽一个“Table View Controller”到设计画面。

 

 5-18

 

将h文件中ViewController的父类从原来的UIViewController修改为UITableViewController。

 

在IB设计画面左侧的Scene列表中选择“Table View Controller Scene” → “Table View Controller”, 打开表视图控制器的标识检查器,在Class选项里选择“ViewController”,这是我们自己的编写视图控制器。

 

5-19

 

然后在Scene列表中选择“Table View Controller Scene” → “Table View Controller” → “Table View”, 打开表视图的属性检查器。Content下有两个选项“Dynamic Prototypes”和“Static Cells”,这两个选项只有在故事板中才有。“Dynamic Prototypes”是构建“动态表”

 

5-20

 

如果通过代码来实现单元格的创建,“Prototype Cells”项目要设为0,代码实现的模式代码如下:

 

static NSString *CellIdentifier = @”CellIdentifier”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

 

Identifier是可重用单元格标识符,这个可重用单元格与Collection视图中的可重用单元格概念一样。首先,在表视图中查找是否有可 以重用的单元格,如果没有就通过initWithStyle: reuseIdentifier:构造方法创建一个单元格对象。

 

如果要利用故事板设计单元格,要选择“Table View Controller Scene” → “Table View Controller” → “Table View” → “Table View Cell”,打开单元格的属性检查器,Style下有很多选项, Identifier是指可重用单元格标识符。

 

 5-21

 

这样操作以后在代码部分就不需要实例化单元格了,我们直接通过设定的Identifier取得单元格的实例,以此达到重用单元格的目的。

 

static NSString *CellIdentifier = @”CellIdentifier”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }

我们需要将“team.plist”和“球队图片”添加到工程中,ViewController.h文件的代码如下:

#import <UIKit/UIKit.h>

@interface ViewController : UITableViewController

@property (nonatomic, strong) NSArray *listTeams;

@end

 

 

 

需要将ViewController的父类修改为UITableViewController。还定义NSArray*类型的属性 listTeams,listTeams用来装载从文件中读取的数据。读取属性列表文件team.plist的操作是在viewDidLoad方法中实现 的

 

 5-22

 

ViewController.m文件的viewDidLoad方法代码如下:

 

- (void)viewDidLoad

{

[super viewDidLoad];

NSBundle *bundle = [NSBundle mainBundle];

NSString *plistPath = [bundle pathForResource:@"team" ofType:@"plist"];

//获取属性列表文件中的全部数据

self.listTeams = [[NSArray alloc] initWithContentsOfFile:plistPath];

}

我们再看看UITableViewDataSource协议方法,代码如下:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return [self.listTeams count];

}

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

{

static NSString *CellIdentifier = @”CellIdentifier”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

NSUInteger row = [indexPath row];

NSDictionary *rowDict = [self.listFilterTeams objectAtIndex:row];

cell.textLabel.text =  [rowDict objectForKey:@"name"];

NSString *imagePath = [rowDict objectForKey:@"image"];

imagePath = [imagePath stringByAppendingString:@".png"];

cell.imageView.image = [UIImage imageNamed:imagePath];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;

}

 

 

由于当前的这个表事实上只有一个节,因此不需要对节进行区分,在tableView: numberOfRowsInSection:方法中直接返回listTeams属性的长度即可。 tableView:cellForRowAtIndexPath:方法中NSIndexPath参数的row方法可以获得当前的单元格行索引。 cell.accessoryType属性是设置扩展视图类型。

 

我们可以将单元格的样式UITableViewCellStyleDefault替换为其它三种,来体验一下其它的三种单元格样式的效果。

 

5-23

 

简单表案例运行结果

分享到:
评论

相关推荐

    IOS开发广告展示-滚动视图库

    内部封装了一些iOS开发常用的滚动视图方法,调用一两个简单的方法,就可以写出漂亮的滚动视图,比如一些软件中常用的广告栏,同时还有过渡动画,自动轮播的功能

    iOS开发切换视图示例

    简易的iOS开发切换视图示例, 适合新手

    iOS开发-抽屉式视图

    实现类似网易新闻客户端一样的抽屉式效果,很简单的一个实现.

    ios游戏开发一创建视图并绘制简单图形

    ios游戏开发一创建视图并绘制简单图形 http://blog.csdn.net/xiaominghimi/article/details/6633172

    史上最全的ios开发源码

    苹果iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X...

    ios-自定义新手引导视图.zip

    自定义的新手引导视图,功能简单,使用方便

    ios-视图弹出、平移、旋转、翻转、剪切等变换效果.zip

    简单的做了视图弹出、平移、旋转、翻转、剪切等变换效果、代码有详细注释

    IOS核心动画-左右摆动Demo

    iOS核心动画CABasicAnimation很简单的实现了图片的循环左右摆动。

    苹果ios开发150个实例源码大全.zip

    苹果ios开发150个实例源码大全: 一个画板,可以选择画笔的颜色 一个简单的page scroll 一个简单的rss阅读器 一个简单的分享到facebookdemo 一个简单的图片编辑器 一个简单的层管理 一个简单的空白页面demo 一个...

    IOS应用开发攻略.pdf

    《iOS应用开发攻略》收录了最新的iOS软件开发的最佳做法,涵盖了应用开发及构建优雅解决方案的必备知识,包括:编写通用的启动画面和嵌入式Web浏览器;构建复杂表视图;使app或游戏活灵活现的填充、变换和动画;通过...

    精通iOS开发(第8版) 中文pdf扫描版 附源代码

    精通iOS开发(第8版)是iOS应用开发基础教程,内容翔实,语言生动。作者结合大量实例,使用Swift语言循序渐进地讲解了适用于iPhone iPad开发的基本流程。新版介绍强大的iOS 10操作系统,涵盖Xcode 8的新功能,书中所有...

    iOS开发之视图切换

    在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单。在iOS开发中常用的视图切换有三种,今天我们将一一介绍,希望大家能够喜欢。

    《iOS6开发指南》精彩书摘

    接下来掌握了如何实现简单表视图和分节表视图,以及表视图中索引、搜索栏、分组的使用。然后学习了如何对表视图单元格进行删除、插入、移动等操作。最后介绍表视图UI设计模式方面的内容。 第6章“视图控制器与导航...

    10个iOS开发的小demo

    整理一下【7年前的咯】 10个日常应用开发的小demo 放大镜 自定义弹框空间 动态视图开门 cell数据库的添加 仿试衣间效果滑动 缓存能默认过期时间 coco2d小游戏 airplay手机之间的传输等。 自己觉得可以就下载。

    iOS-Path-to-Mastery:精通iOS开发的途径

    iOS掌握路径精通iOS开发的途径。 使用它来确定您现在所处的位置,学习达到下一个水平所需的知识,并在学习iOS时保持动力。关于这个仓库本文最初发布在。 该存储库仅用于对路径的技能和级别进行反馈。贡献分叉此存储...

    一步一步学习IOS6

    第三部分:iOS 编程向导:创建一个简单的表视图(Table View)应用程序 第四部分:定制UITableView表视图单元格 第五部分:如何处理UITableView中的行选择 第六部分:应用Property List强化你的Simple Table应用程序...

    swift-iOS的自适应滚动图形视图用来可视化简单的离散数据集

    一个iOS的自适应滚动图形视图用来可视化简单的离散数据集,采用Swift开发

Global site tag (gtag.js) - Google Analytics