首先,在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;
}