ios基础篇(十四)——UITableView(二)属性及基本用法

时间:2023-12-27 21:12:19

上一篇说了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; }

如图:

ios基础篇(十四)——UITableView(二)属性及基本用法

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 @"标题二"; }

如图:

ios基础篇(十四)——UITableView(二)属性及基本用法

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 ;
}

如图:

ios基础篇(十四)——UITableView(二)属性及基本用法

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;
}
}
}