UITableView控件在iOS中有着广泛的应用,它会管理具有相同数据结构的数据。它继承于UIScrollView。
每条数据都是显示在UITableViewCell中 TableView的两种样式:Plain:普通列表样式 Grouped: 这是分块风格 每个分区称为一个section,每一行称为row,编号都是从0开始
初始化
- UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.frame.size.height - 64) style:UITableViewStylePlain];
- UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.frame.size.height - 64) style:UITableViewStyleGrouped];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
第一个是它有多少个组 执行第一个协议时最好设置一个成员变量 返回值是return[_array count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"%s", __func__);
static NSString *cellIdentify = @"cell";//设置全局变量
MainTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentify];//去cellIdentify重用池中取cell
if (!cell) {
cell = [[[MainTableViewCellalloc]initWithStyle:UITableViewCellStyleValue1reuseIdentifier:cellIdentify]autorelease];//创建一个cell放到重用池cellIdentify里面,方便下次调用取值
}
NSLog(@"section = %d row = %d", indexPath.section, indexPath.row);//indexPath在协议中是一个重要的属性,包含section和row。此句查看UITableView拖动时,执行顺序
return cell;
注意自动释放,还有设置代理人
//设置表头
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0,0,100, 100)];
[label setBackgroundColor:[UIColor blackColor]];
[tableView setTableHeaderView:label]; //需要一个UIView类型的参数宽度和tableView的宽度相同 高度自定义
//设置分割线颜色
[tableView setSeparatorColor:[UIColor cyanColor]];
[self.view addSubview:tableView];
[tableView release];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark 实现协议的方法
//一个section有多少row
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ //一个Section中有多少row
//数组的元素个数
if (section == 0) {
return 3;
} else {
return 2;
}
// return [_tableArray count];
}
//该方法能为row添加cell(内容)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//设置重用池key
static NSString *cellIdentify = @"cellIdentify";
//取cell
//CustomTableViewCell 自定义类 里面的控件放在 self.contentView上
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentify];
//判断cell是否存在
if (!cell) {
//如果不存在 创建UITableViewCell 对象 并且放到重用池里
cell = [[[CustomTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentify]autorelease]; //最后一个参数是重用池的key
}
//参数 indexPath 有两个属性 一个是section 只的哪个区域 一个是row
NSString *str =[_tableArray objectAtIndex:indexPath.row];
//cell的内容
// [cell.textLabel setText:str];
// [cell.imageView setImage:[UIImage imageNamed:@"1.jpg"]];
// [cell.detailTextLabel setText:@"hello"];
[cell.label1 setText:str];
return cell ;
}
//设置有多少个section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 3;
}
//设置section头标题的名称
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
{
if (section == 0) {
return @"A";
} else{
return @"B";
}
}
//设置section脚标题的名称
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
return @"下一页";
}
//设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 50;
}
//设置section头标题的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
//设置section脚标题的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 30;
}
//右侧添加一个索引表
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
NSMutableArray *arr = [NSMutableArray array];
for (int i = 65; i <= 90; i++) {
[arr addObject:[NSString stringWithFormat:@"%c", i]];
}
return arr;
}