IOS第二十天——实现一个简单的表

来源:互联网 发布:mac重装系统找不到硬盘 编辑:程序博客网 时间:2024/04/28 23:49

昨天我们学习了一下如何做一个登录,咳咳,登录这个是假的,但也是一个进步,那么接下来我们会学习一下关于表格(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;}
原创粉丝点击