`

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开发调试工具-数据信息、视图信息可视化工具

    本篇将详细介绍一种名为"PropertyView"的iOS开发调试工具,它专注于数据信息和视图信息的可视化。 PropertyView是一款强大的辅助工具,它允许开发者直观地查看应用中的对象属性和视图层次结构。在实际开发中,这种...

    iOS开发进阶-完整版

    根据提供的信息,我们可以推断出这是一本关于iOS开发进阶的书籍,作者为唐巧。虽然提供的部分内容似乎并不是实际的章节内容,但从标题、描述和标签中,我们可以推测本书可能涵盖的一些关键知识点。 ### iOS开发进阶...

    IOS开发斯坦福--卡牌游戏源码

    在这个“IOS开发斯坦福--卡牌游戏源码”项目中,我们将探讨iOS应用开发的基础,特别是使用Swift编程语言和UIKit框架来构建一款简单的卡牌游戏。 首先,Swift是苹果公司推出的一种强类型、高性能的编程语言,它的...

    IOS 创建简单表视图

    在iOS开发中,表视图(UITableView)是用于展示数据的常见组件,它允许用户滚动浏览和交互。本实例将详细介绍如何创建一个简单的表视图,重点在于实现UITableViewDataSource协议中的核心方法。首先,让我们理解...

    ios 表视图一

    在iOS开发中,表视图(UITableView)是用于展示数据列表的一种常见且强大的控件。它允许用户滚动浏览数据,并可以实现多种交互功能,如点击选中、滑动操作等。"ios 表视图一"这个主题主要是针对初学者,提供了一个...

    ios-集合视图简单自定义布局.zip

    在iOS开发中,集合视图(UICollectionView)是一个强大的控件,用于展示大量数据,具有高度可定制性。这个“ios-集合视图简单自定义布局.zip”文件包含了一个名为"CollectionLayerDemo"的示例项目,它展示了如何...

    基于IOS平台(object-c)的游戏五子棋程序设计

    2. **MVC设计模式**:在iOS开发中,Model-View-Controller (MVC) 是一种常见的架构模式。在这个五子棋游戏中,模型负责游戏规则和逻辑,视图处理用户界面的显示,控制器则协调模型和视图的交互。 3. **用户界面设计...

    IOS应用源码Demo-视图控制器(动画版)-毕设学习.zip

    1. **iOS应用结构**:了解iOS应用的基本架构,如 storyboard、XIB 文件的使用,以及如何组织 MVC(模型-视图-控制器)架构。 2. **UIViewController**:掌握UIViewController的生命周期,如何加载视图,以及如何...

    iOS开发之表视图详解

    在iOS开发中,表视图(UITableView)是一个至关重要的组件,它被广泛用于展示列表形式的数据。本篇文章将深入探讨表视图的各个方面,包括其组成、相关类、分类、单元格的样式以及数据源协议和委托协议。 首先,表...

    ios-视图抖动.zip

    在iOS开发中,视图动画是提升用户体验的重要手段之一,特别是在交互设计中,视图抖动效果常用于吸引用户注意或者表示错误操作。本压缩包"ios-视图抖动.zip"显然包含了一个实现按钮视图抖动功能的示例。下面我们将...

    ios-一行代码-----弹出视图动画.zip

    在iOS开发中,视图动画是提升用户体验的关键因素之一,它可以为用户界面带来生动和吸引人的效果。在给定的压缩包"ios-一行代码-----弹出视图动画.zip"中,显然包含了一个简单易用的库或者示例,允许开发者通过一行...

    IOS-简易计算器-根据Stanford教授思想做的

    在iOS开发领域,构建一个简易计算器是一个经典的练习项目,它能帮助开发者理解基本的UI设计、事件处理以及计算逻辑。本项目"IOS-简易计算器-根据Stanford教授思想做的"正是这样一个实例,它遵循了斯坦福大学教授的...

    IOS应用源码Demo-一个简单的空白页面demo-毕设学习.zip

    最后,由于被标记为“毕设学习”,我们可以推断这是为毕业设计或学习目的而准备的,适合初学者了解iOS开发的基础。 【描述解析】:“前两年的IOS应用源码,主要是用于毕业设计学习的。”这段描述告诉我们,这个源码...

    精通ios开发第七版-代码

    你将在“Beginning iOS 7 Source Code”这个压缩包中找到与书中章节对应的源代码,这些代码实例涵盖了从简单的视图到复杂的控制器,从基本的UI元素如按钮和标签,到高级组件如表视图和滚动视图。 在iOS 7中,Apple...

    IOS应用源码Demo-视图控制器(无动画版)-毕设学习.zip

    它主要用于毕业设计学习,意味着这个项目可能包含了完成一个完整功能的应用所需要的基本元素,比如用户界面、数据处理和交互逻辑等,是学生进行iOS开发实践和理论学习的一个实例。 【标签解读】 - "IOS":指代苹果...

    IOS应用源码Demo-一个简单的图片编辑器-毕设学习.zip

    7. **软件架构**:MVC(模型-视图-控制器)架构的实现,理解每个部分的角色和职责。 8. **版本控制**:可能包含了Git的使用,展示了如何通过版本控制来管理代码。 9. **测试**:单元测试和集成测试的编写,确保...

    《马上着手开发 iOS 应用程序》-HelloWorld

    在iOS开发的世界里,"Hello, World!"是一个经典的起点,它是每个新手开发者向移动编程迈出的第一步。这个项目,名为“《马上着手开发 iOS 应用程序》-HelloWorld”,显然是一个针对初学者的官方入门教程,旨在引导新...

    IOS应用源码Demo-自制超简易电子书,页码问题解决版 ZoomingPDFViewer-毕设学习.zip

    这份名为“IOS应用源码Demo-自制超简易电子书,页码问题解决版 ZoomingPDFViewer-毕设学习.zip”的压缩包,包含了适用于iOS平台的源代码,特别适合那些正在进行毕业设计或者论文研究的学生进行学习。这个项目的核心是...

Global site tag (gtag.js) - Google Analytics