上一篇说了UITableView的重用机制,让我们对UITableView有了简单了解,下面说说UITableView的属性及常见方法。
一、属性
1、frame:设置控件的尺寸和大小
2、backgroundColor:设置控件的颜色
3、style:获取表视图的样式
4、dataSource:设置UITableViewDataSource代理
5、delegate:设置UITableViewDelegate代理
6、backgroundView:设置背景视图
7、editing:是否允许编辑,默认为NO
8、sectionHeaderHeight:设置组表视图的头标签高度
9、sectionFooterHeight:设置组表视图的尾标签高度
10、allowsSelection:在非编辑下,行是否可以选中,默认YES
11、allowsSelectionDuringEditing:控制某一行时,是否可以编辑,默认NO
12、allowsMultipleSelection:是否可以选择多行,默认NO
13、allowsMutableSelectionDuringEditing:在选择多行的情况下,是否可以编辑,默认NO
14、sectionIndexTrackingBackgroundColor:设置选中部分的背景颜色
15、sectionIndexMinimumDisplayRowCount:显示某个组索引列表在右边当行数达到这个值,默认是NSInteger的最大值
16、sectionIndexColor:选择某个部分的某行改变这一行上文本的颜色
17、separatorStyle:设置单元格分隔线的样式
18、separatorColor:设置选中单元格分隔线的颜色
19、tableHeaderView:设置组表的头标签视图
20、tableFooterView:设置组表的尾标签视图
二、常见方法
1、- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
tableview 有多少个section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return ; }
2、- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;
对应的section有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return ;
}
3、- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;——返回指定的 row 的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;——返回指定的 section的header view 的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;——返回指定的 section的footer view 的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 6;
} - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return ;
} - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return ;
}
4、- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath;
返回指定的row 的cell,可以返回自定义的cell;
这里只看看最基本的用法:
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *Indentifier = @"UITableViewCell";
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Indentifier];
} //移除所有子视图
[cell.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIView *view = (UIView*)obj;
[view removeFromSuperview];
}]; //添加新视图
UILabel *label = [[UILabel alloc]initWithFrame:(CGRect){,,,}];
label.text = [NSString stringWithFormat:@"第%d行",(int)indexPath.row];
[cell addSubview:label]; UIImageView *imageIcon = [[UIImageView alloc] initWithFrame:(CGRect){,,,}];
imageIcon.image = [UIImage imageNamed:@"u=3971024035,4095552302&fm=21&gp=0"];
[cell addSubview:imageIcon]; return cell; }
如图:
5、- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
返回指定的section 的 header 的 title,如果这个section header 有返回view,那么title就不起作用了。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
if (section==) {
return @"标题一";
}else
return @"标题二"; }
如图:
6、 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
同理设置FooterView:- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
返回指定的 section header 的view,如果没有,这个函数可以不返回view
注意:设置了headerView一定不要忘记返回高度!
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *headerView = [[UIView alloc] initWithFrame:(CGRect){,,,}]; UILabel *title = [[UILabel alloc] initWithFrame:(CGRect){,,,}];
title.text = @"headerView";
title.textColor = [UIColor orangeColor];
title.textAlignment = NSTextAlignmentCenter;
[headerView addSubview:title]; UIImageView *headImage = [[UIImageView alloc] initWithFrame:(CGRect){,,,}];
headImage.image =[UIImage imageNamed:@"u=1522827729,398642494&fm=21&gp=0"];
[headerView addSubview:headImage]; return headerView;
} - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return ;
}
如图:
7、 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
当用户选中某个行的cell的时候,回调用这个。但是首先,必须设置tableView.allowsSelection = YES 才行。
- (void)tableView:(UITableView *)TableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section==) {
switch (indexPath.row) {
case :
//点击每行想实现什么动作写在这里就好了
break; default:
break;
}
}
}
下面附上完整代码:
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>{ UITableView *tableView;
NSArray *dataArray; } @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. //初始化,设置位置大小
tableView = [[UITableView alloc] initWithFrame:(CGRect){,,self.view.frame.size.width,self.view.frame.size.height}];
//添加到视图
[self.view addSubview:tableView];
//设置UITableViewDeledate代理
tableView.delegate = self;
//设置UITableViewDataSource代理
tableView.dataSource = self;
//设置单元格分隔线样式
tableView.separatorStyle = UITableViewCellSeparatorStyleNone; tableView.allowsSelection = YES; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return ;
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return ;
} - (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *Indentifier = @"UITableViewCell";
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Indentifier];
} //移除所有子视图
[cell.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIView *view = (UIView*)obj;
[view removeFromSuperview];
}]; //添加新视图
UILabel *label = [[UILabel alloc]initWithFrame:(CGRect){,,,}];
label.text = [NSString stringWithFormat:@"第%d行",(int)indexPath.row];
[cell addSubview:label]; UIImageView *imageIcon = [[UIImageView alloc] initWithFrame:(CGRect){,,,}];
imageIcon.image = [UIImage imageNamed:@"u=3971024035,4095552302&fm=21&gp=0"];
[cell addSubview:imageIcon]; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return ; } //- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
// if (section==0) {
// return @"标题一";
// }else
// return @"标题二";
//
//} - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *headerView = [[UIView alloc] initWithFrame:(CGRect){,,,}]; UILabel *title = [[UILabel alloc] initWithFrame:(CGRect){,,,}];
title.text = @"headerView";
title.textColor = [UIColor orangeColor];
title.textAlignment = NSTextAlignmentCenter;
[headerView addSubview:title]; UIImageView *headImage = [[UIImageView alloc] initWithFrame:(CGRect){,,,}];
headImage.image =[UIImage imageNamed:@"u=1522827729,398642494&fm=21&gp=0"];
[headerView addSubview:headImage]; return headerView;
} - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return ;
} - (void)tableView:(UITableView *)TableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section==) {
switch (indexPath.row) {
case :
//点击每行想实现什么动作写在这里就好了
break; default:
break;
}
}
}