昨天我们学习了一下如何做一个登录,咳咳,登录这个是假的,但也是一个进步,那么接下来我们会学习一下关于表格(UITableView)的创建,表格是用于显示数据列表的,在iPhone中,表格只提供一列多行的形式,当然开发者也可以自定义表格来显示多行多列。
那么我们来尝试着实现一个简单的表,通过这个示例来了解表视图的工作原理。
1. 在Xcode中创建一个新项目,选择“Master-Detail Application”,取名为“MyTableView",点击Create,完成创建项目。
2. 展开项目源文件列表,MyTableView,我们可以看到有如下的文件:
3. 如果不做任何更改,直接运行的话,我们回看到一个空白的表格:(ps:我们并不是要空白的表格)
4. 我们一点一点来改变这个,往空白的表格中写如一些数据。打开"ECMasterViewController.h",添加以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
//给数组赋值
NSArray *array=[[NSArray alloc] initWithObjects:@"Abc",@"Def",@"Ghi",@"JK",@"LM", nil];
self->dataArray=array;
}
上述代码中,UITableViewDelegate和UITableViewDataSource这两个是我们的类遵守的协议,来充当表视图的委托和数据源,然后我们声明了一个数组,用来存放我们要展示的数据。
5. 切换到"ECMasterViewController.m"文件,修改其中代码:(注:我买的这本iPhone应用从开发到入门在现在来看好像已经是有些老了,所以接下来的这些改动,都是根据Xcode版本变化作出的相应调整,具体我会进行描述):
a) 修改视图加载方法:
- (void)viewDidLoad
{
[super viewDidLoad];
//给数组赋值
NSArray *array=[[NSArray alloc] initWithObjects:@"Abc",@"Def",@"Ghi",@"JK",@"LM", nil];
self->dataArray=array;
}
需要注意的是,我们这里不用直接象书中那样儿直接使用self.dataArray,而是需要使用self->dataArray
b) 添加设备屏幕为竖屏展示的方法:
//设置设备屏幕为竖屏
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
//return YES for supported orientations.
return (toInterfaceOrientation==UIInterfaceOrientationPortrait);
}
c) 将表格的行数设置为数组的元素个数:
//设置表格的行数为数组的元素个数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self->dataArray count];
}
d) 接下来将数组内容展示在表格的单元格上:
//每一行的内容为数组相应索引的值
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
//设置单元格的字符串内容
cell.textLabel.text=[self->dataArray objectAtIndex:indexPath.row];
return cell;
}
这里简单介绍下最后这个方法:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
当表格视图需要绘制其中一行的时候,就会调用此方法,那么我们会注意到此方法的第二个参数是一个NSIndexPath实例,表格视图正是使用此机制把分区和行绑定到一个对象中的。要想从NSIndexPath中获得一行或一个分组,只需要调用行方法或者分组方法就可以了。这两个方法都返回一个int值,第一个参数tableView是对发起请求的表的饮用,通过它,我们就可以创建充当多个表的数据源的类。
OK,写到这里,我们来run一下看看实际运行的效果如何:
诶,这个效果确实已经丑的一坨儿了,但原谅我这个感冒了的家伙吧,今天就学到这儿,六七个小时之后再起来学习。
2013年05月04日,Eric.Tang 记
- (void)viewDidLoad
{
[super viewDidLoad];
//给数组赋值
NSArray *array=[[NSArray alloc] initWithObjects:@"Abc",@"Def",@"Ghi",@"JK",@"LM", nil];
self->dataArray=array;
}