一、创建一个工程,在ViewController.h文件中编写代码:
#import <UIKit/UIKit.h>
//添加两个协议一个是表格视图数据源协议,一个是表格视图代理协议
@interface ViewController :UIViewController<UITableViewDataSource,UITableViewDelegate>
@end
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//步骤二、
//创建一个区域用来显示表格
CGRect rect =CGRectMake(0,40,300,420);
//初始化表格视图
UITableView *tableView = [[UITableViewalloc]initWithFrame:rect];
//设置表格视图对象的代理
tableView.delegate =self;
//表格视图数据源的代理
tableView.dataSource =self;
//将表格视图添加到当前窗口根视图
[self.viewaddSubview:tableView];
}
//步骤一:
//该代理方法设置表格行数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return5;
}
//该代理方法用来初始化和返回表格视图的单元格,是最重要的一个方法
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//创建一个字符串作为单元格的标识符
/*单元格的标识符可以看作是一种重用机制,此方法可以从所有已经开辟内存单元格里面,选择一个具有同样标识符的,空闲的单元格
*/
static NSString *identifier =@"cellIndentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
//如果没有可重用单元格创建新的单元格
if (cell ==nil) {
cell = [[UITableViewCellalloc]initWithStyle:
UITableViewCellStyleSubtitle reuseIdentifier:identifier];
//设置单元格标题文字内容
cell.textLabel.text =@"Cell title here.";
//设置单元格文字描述内容
cell.detailTextLabel.text =@"Detail Information here.";
}
return cell;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
运行结果:
总结:
一、Controller需要实现两个 delegate,分别是 UITableViewDelegate和 UITableViewDataSource
二、UITableView对象的 delegate要设置为 self
cell重用原理
当滚动列表时,部分UITableViewCell会移出窗口,
UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。
当UITableView要求dataSource返回UITableViewCell时,
dataSource会先查看这个对象池,
如果池中有未使用的UITableViewCell,
dataSource会用新的数据配置这个UITableViewCell,
然后返回给UITableView,
重新显示到窗口中,从而避免创建新对象
不同类型的Cell重用
UITableViewCell有个NSString *reuseIdentifier属性,
可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。
当UITableView要求dataSource返回UITableViewCell时,
先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,
如果有,就重用,
如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象