标签:
一、UITableView的概念
@interface UITableView : UIScrollView <NSCoding>
@interface UITableViewCell : UIView <NSCoding, UIGestureRecognizerDelegate>
二、UITableView的基本使用
// 创建对象 // 初始化对象并设置样式 // 系统为我们提供了两种样式(UITableViewStyleGrouped,UITableViewStylePlain) self.tableView = [[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];
// 设置分割线颜色(Plain样式下) self.tableView.separatorColor = [UIColor blackColor]; // 设置分割线的样式 self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // 设置行高 self.tableView.rowHeight = 100; // 添加头视图,脚视图 UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 200)]; headerView.backgroundColor = [UIColor grayColor];
UIView *footView = [[UIView alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 200, self.frame.size.width,200)];
footView.backgroundColor = [UIColor grayColor];
self.tableView.tableHeaderView = headerView;
self.tableView.tableFooterView = footView;
三、UITableView显示数据
// 显示数据相关的代理 @property (nonatomic, weak, nullable) id<UITableViewDataSource> dataSource; // 视图操作相关的代理 @property (nonatomic, weak, nullable) id<UITableViewDelegate> delegate;
// 设置TableView数据源代理 self.rootView.tableView.dataSource = self;
// 设置TableView代理 self.rootView.tableView.delegate = self;
// 每一个分区显示的行数(当前方法必须实现) - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; // 返回cell对象,每一行显示的内容(当前方法必须实现) - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
// 标题视图 cell.textLabel.text = [NSString stringWithFormat:@"朋友圈%ld", indexPath.row]; // 副标题视图 cell.detailTextLabel.text = @"分享"; // 图片视图 cell.imageView.image = [UIImage imageNamed:@"Action_Moments"]; // 右侧配件(系统样式) cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // 右侧配件(自定义样式) cell.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Expression_3"]];
四、UITableViewCell的重用机制
1)当一个cell被滑出屏幕,这个cell会被系统放到相应的重用池中。
2)当tableView需要显示一个cell,会先去重用池中尝试获取一个cell。
3)如果重用池没有cell,就会创建一个cell。
4)取得cell之后会重新赋值进行使用。
#pragma mark UITableViewCell重用的第一种方法 // 返回cell对象 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"cell"; // 1.优先从重用队列中查找标识符为cell的UITableViewCell对象 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (cell == nil) { // 如果cell为空,说明重用队列中没有标识符为cell的对象,那么创建标识符为cell的UITableViewCell的对象 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; } // 设置cell显示的数据 cell.textLabel.text = @"阿福"; return cell; } #pragma mark UITableViewCell重用的第二种方法 // 第一步:注册cell [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; // 第二步:根据重用标识符查找cell // 如果在重用池中找到就返回,找不到就会自动创建一个并返回 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
五、UITableView和数组的结合使用
// 定义数组用来存放所有的数据 @property (nonatomic, strong) NSMutableArray *dataArray;
// 初始化大数组 self.dataArray = [NSMutableArray arrayWithArray:@[@"女神", @"傻逼", @"晒到", @"而且"]];
// tableView每个分区要显示的个数 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // 根据元素个数设置行数 return self.dataArray.count; }
// 返回cell - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // cell重用 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; // 根据row从数组中取值 cell.textLabel.text = self.dataArray[indexPath.row]; return cell; }
六、UITableView的常用协议方法
// 设置分区个数 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; // 设置每一个cell的高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; // 设置分区头的高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section; // 设置分区尾的高度 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section; // 自定义header视图 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; // 自定义footer视图 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section; // 点击cell - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
标签:
原文地址:http://www.cnblogs.com/soley/p/5407466.html