一、系统自带 cell 的使用
- 使用 UIViewController 的话需要遵循 UITableViewDataSource 数据源协议和 UITableViewDelegate 代理协议
- 数据源协议主要包含以下三个方法:
两个必须实现的方法:
@required
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
一个选择实现的方法:
@optional
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; // Default is 1 if not implemented
如下是在 UIViewController 中使用 tableView 的代码实现
主要在 .m 文件中
#import "TestViewController.h"
@interface TestViewController ()<UITableViewDelegate, UITableViewDataSource>
/** tableView */
@property (nonatomic, strong) UITableView *tableView;
@end
@implementation TestViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置tableView的frame和展示样式,展示样式有 UITableViewStylePlain 和 UITableViewStyleGrouped
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
// 让控制器成为tableView的数据源代理和代理
self.tableView.dataSource = self;
self.tableView.delegate = self;
// 注册cell和设置重用标识符
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
// 添加tableView到控制器的视图上
[self.view addSubview:self.tableView];
}
#pragma mark - tableView dataSource
// 返回列表中需要显示的分区数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// 默认只有一个分区的话,可以不实现该方法
return 2;
}
// 返回每个分区中显示的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// 如果第一个分区显示5行,第二个分区显示7行
// 分区和行的索引跟数组是一样的,都默认从0开始
return section == 0 ? 5 : 7;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 系统提供的cell样式有4种:
// 1.UITableViewCellStyleDefault
// 2.UITableViewCellStyleSubtitle
// 3.UITableViewCellStyleValue1
// 4.UITableViewCellStyleValue2
// UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
// UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
// UITableViewCell *cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"cell"];
cell.textLabel.text = [NSString stringWithFormat:@"%ld---%ld", indexPath.section, indexPath.row];
cell.detailTextLabel.text = @"我是副文本";
cell.imageView.image = [UIImage imageNamed:@"1"];
// 添加右边的小箭头
// accessoryType 有5种样式:
// 1.UITableViewCellAccessoryNone 不展示右边accessoryType样式
// 2.UITableViewCellAccessoryDisclosureIndicator 小箭头
// 3.UITableViewCellAccessoryCheckmark 对勾
// 4.UITableViewCellAccessoryDetailButton iOS 7.0后适用详情按钮
// 5.UITableViewCellAccessoryDetailDisclosureButton
// cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// cell.accessoryType = UITableViewCellAccessoryCheckmark;
cell.accessoryType = UITableViewCellAccessoryDetailButton;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
#pragma mark - tableView delegate
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return section == 0 ? @"我是第1个分区,对应索引0" : @"我是第2个分区,对应索引1";
}
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
return section == 0 ? @"我是第1个分区尾部,对应索引0" : @"我是第2个分区尾部,对应索引1";
}
- UITableViewCellStyleDefault 和 UITableViewCellAccessoryDisclosureIndicator 运行截图:
2.UITableViewCellStyleSubtitle 和UITableViewCellAccessoryCheckmark 运行截图:
3.UITableViewCellStyleValue1 和UITableViewCellAccessoryDetailButton 运行截图:
4.UITableViewCellStyleValue2 和UITableViewCellAccessoryDetailDisclosureButton 运行截图: