之前两篇博客简单学习了Picker view控件的使用,接下来再学习IOS应用中很重要的一个视图--表视图。
在表视图中,每个表视图都是UITableView的一个实例,每个可见行都是UITableViewCell的一个实例。
表视图有两种基本格式,分组的表和普通表,普通表可以实现索引,实现了索引的表成为索引表。(PS.技术上,分组表也可以实现索引,不过好像苹果的设计规范中不支持)
一个简单的表视图应用
界面设计:
向storyboard中拖一个table view控件,他会自动占满屏幕,至于约束,可以自己创建,记得设置tableview的tag为1,后面会用到。
table view的outlets中会有dataSource和delegate两个设置项,按住每个设置项后面的空心圆,拖向storyboard中的controller按钮,完成关联。
代码讲解:
首先要在对应控制器的.h文件中实现UITableViewDataSource和UITableViewDelegate两个协议。
在.m文件中首先定义一个nsarray类型的属性,这个属性用来存放tableview要显示的数据,并且在viewDidLoad方法中给nsarray赋值。
在viewDidLoad方法中还需要做的是把tableview的顶部向下偏移一定数量来美化界面(算不得美化,如果不做这一步处理,tableview顶部会紧挨着状态栏,很难看<( ̄▽ ̄)> 哇哈哈…)
UITableView* tableView = (id)[self.view viewWithTag:1];//通过tag获取控件 UIEdgeInsets contentInset = tableView.contentInset; contentInset.top = 20; [tableView setContentInset:contentInset];
然后实现两个委托方法,一个是- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section,返回这个table的行数,
另一个是- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath,这个方法会返回指定行的TableViewCell。
首先看看这个方法的参数,第一个参数是一个tableview,表示触发这个方法的table。第二个参数是NSIndexPath类型的值,这个类型有两个主要的属性,section和row,组和行。
创建一个UITableViewCell对象,此处使用的dequeueReusableCellWithIdentifier:方法,这个方法会返回一个可以重用的cell,也有可能返回nil
所以我们要判断返回值,如果返回值为nil,就需要实例化一个cell
有了cell,就能设置cell要显示的文本
cell.textLabel.text = self.dwarves[indexPath.row];
完整代码:
1 // 2 // ViewController.m 3 // Simple Table 4 // 5 // Created by 张光发 on 15/10/19. 6 // Copyright (c) 2015年 张光发. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 @property (strong, nonatomic) NSArray* dwarves; 13 @end 14 15 @implementation ViewController 16 17 - (void)viewDidLoad 18 { 19 [super viewDidLoad]; 20 self.dwarves = @[ @"Sleepy", @"Sneezy", @"Bashful", @"Happy", @"Doc", @"Grumpy", @"Dopey", @"Thorin", @"Dorin", @"Nori", @"Ori", @"Balin", @"Dwalin", @"Fili", @"Kili", @"Oin", @"Gloin", @"Bifur", @"Bofur", @"Bombur" ]; 21 UITableView* tableView = (id)[self.view viewWithTag:1]; 22 UIEdgeInsets contentInset = tableView.contentInset; 23 contentInset.top = 20; 24 [tableView setContentInset:contentInset]; 25 } 26 27 - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section 28 { 29 return [self.dwarves count]; 30 } 31 32 - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath 33 { 34 static NSString* SimpleTableIndetifier = @"SimpleTableIdentfier"; 35 UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIndetifier]; 36 if (cell == nil) { 37 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIndetifier]; 38 } 39 cell.textLabel.text = self.dwarves[indexPath.row]; 40 return cell; 41 } 42 43 @end