首先,在iPhone App中的表视图是什么?
表视图(Table View) 是IOS Apps 中一个通用的UI元素。很多应用程序在一定程度上,都有使用表视图来显示数据列表。最好的例子是内置的iPhone应用程序。你的联系人显示在表视图中。另外一个例子是Mail应用程序,它使用表视图显示你的邮箱和邮件。不仅可以用来显示文本数据,表视图也可以呈现图像数据。内置的Video和YouT ube应用程序是这一用法的例子
1.创建simpleTable 项目
启动Xcode, 创建一个Single View application 的新项目
输入Xcode项目所有必须的选项:
Product Name: SimpleTable
Company Identifier: com.appcode
Class Prefix: SimpleTable
Device Family: iPhone
Use Storyboards:[不选择]
Use Automatic Reference Counting:[选择]
Include Unit Test:[不选择]
2.设计视图
首先,我们将创建用户界面,并添加表视图。选择SimpleTableViewController.xib文件,切换到Interface Builder界面。
在对象库(Object Library)中,选择Table View对象,并拖拽到视图中。
3.第一次运行你的应用程序
在继续之前,尝试使用模拟器运行你的应用程序。点击Run按键构建你的App并进行测试。
模拟器屏幕如下图所示:
我们已经设计好了表视图,但是,现在它没有包含任何数据。接着,我们将编写代码,添加表数据。
4.添加表数据
返回项目导航栏,选择SimpleTableViewController.h 文件。 在UIViewController 之后,添加<UITableViewDelegate,UITableViewDataSource>。完成后代码如下所示:
#import <UIKit/UIKit.h>
@interface SimpleTableViewController : UIViewController < UITableViewDelegate , UITableViewDataSource >
@end
在Object-C中,UITableViewDelegate和UITableViewDataSource称为协议。基本上,为了在表视图中显示数据,我们必须遵守定义在协议中的要求,并实现所有要求的方法。
UITableViewDelegate 和 UITableViewDataSource
UITableView 是表视图幕后的实际类,用来灵活处理不同的数据类型。你可以显示国家列表或者联系人姓名。或者像本示例一样,我们将使用表视图程序菜谱列表。因此,你可以告诉UITableView需求显示的数据列表呢?
UITableViewDataSource 是答案,它用来连接你的数据和表视图。
UITableViewDataSource 协议定义了2个要求实现的的方法
(tableView:cellForRowAtIndexPath 和 tableView:numberOfRowsInSection)。通过实现这些方法,你告诉表视图显示多少行数据和每一行数据。
UITableViewDelegate 负责处理UITableView的表现。协议中可选方法让你管理表行的高度,配置节点头部和底部,对表单元重新排序等等。
接着,选择SimpleTableViewController.m 文件,定义一个实例变量,存放数据。
@implementation SimpleTableViewController
{
NSArray * tableData;
}
在viewDidLoad方法中(Called after the controller's view is loaded into memory - 在控制器的视图装载到内存中完成之后,调用该方法),添加如下代码实例化 tableData 数组。我们初始化数组位菜谱离列表:
- ( void )viewDidLoad
{
[ super viewDidLoad ];
//Initialize table data
tableData = [ NSArray arrayWithObjects : @"Egg Benedict" , @"Mushroom Risotto" , @"Full Breakfast" , @"Hamburger" , @"Ham and Egg sandwith" , @"Creme Brelee" , @"White Chcolate Dount" , @"Starbucks Coffee" , @"Vegetable Curry" , @"Instant Noodle with Egg" , @"Noodle with BBQ Pork" , @"Japanese Noodle with Pork" , @"Green Tea" , @"Thai Shrimp Cake" , @"Angry Birds Cake" , @"Ham and Cheese Panini" , nil ];
}
在Object-C中,NSArray 是创建和管理数组的类,你可以使用NSArray创建静态数组,其容量是固定的。如果你需要创建动态数组,则使用NSMutableArray代替。
NSArray提供了一组工厂方式来创建数组对象。在我们的代码中,我们使用arrayWithObjects来实例化一个NSArray对象,并预先填充特定的元素(如Hamburger)。
最后,我们需要添加2个数据源方法:tableView:numberOfRowInSection 和 tableView:cellForRowAtIndexPath。这两个方法是UITableViewDataSource协议的一部分。在配置UITableView时,需要强制实现这两个方法。
第一个方法用来通知表视图选择了多少条数据行,因此添加如下代码。count方法简单返回tableData数组中元素个数。
- ( NSInteger )tableView:( UITableView *)tableView numberOfRowsInSection:( NSInteger )section
{
return [ tableData count ];
}
接着,我们实现另外一个需要实现的方法:
- ( UITableViewCell *)tableView:( UITableView *)tableView cellForRowAtIndexPath:( NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"simpleTableItem" ;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier :simpleTableIdentifier];
if (cell == nil ) {
cell = [[ UITableViewCell alloc ] initWithStyle : UITableViewCellStyleDefault reuseIdentifier :simpleTableIdentifier];
}
cell. textLabel . text = [ tableData objectAtIndex :indexPath. row ];
return cell;
}