标签:
1、UITabalView是一个表格视图,下图示意:
UITabalView 设置数据源协议
UITabalView 如何显示数据源:
- 设置dataSource数据源
- 数据源要遵守UITabalViewSource协议
- 实现数据源中的方法就可以了
// 1、告诉tableView第section组有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
XMGCarGroup *group = self.groups[section];
return group.cars.count;
}
//2、告诉tableView一共有多少组数据
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.groups.count;
}
// 3、告诉tableView第indexPath行显示怎样的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] init];
XMGCarGroup *group = self.groups[indexPath.section];
XMGCar *car = group.cars[indexPath.row];
cell.textLabel.text = car.name;
cell.imageView.image = [UIImage imageNamed:car.icon];
return cell;
}
2、cell的复用
第一种复用的方法:
//配置每条cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifer = @"cellIdentifer";
//从池子中通过标识位获取
UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:identifer];
//取不到则创建
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer];
}
return cell;
}
//第二种复用的方法,在外部注册带有标识的cell,然后在里面用:
[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"标识"];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//从池子中通过标识位获取
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"标识"];
}
第三种复用的方法
如果Main.storyboard里面创建了TableView,那么就可以选择Main.storyboard里面TableViewControll里面的Cell,然后更改Cell的标识(也就是相当于在故事板里面注册了cell),这样就可以找到带有标识的Cell,下图
如果我们需要在cell里面添加内容,都是放在contentview里面,而cell.textLable.text 其实也是放在了ContentView里面的,只是为了方便访问,把textLable放在了外面。
如果在故事板里面父之一个cell,然后修改标识为cell2的话,就是注册了两个cell,那么就可以任意选择两个标识的cell了;
例如:我想显示偶数行显示标识cell2的cell的话,看下图
如果用代码来表示注册了两个标识的cell的话,就应该这样写:
[_tableView registerClass:[UITableViewCell class]forCellReuseIdentifier:@"cell"];
[_tableView registerClass:[UITableViewCell class]forCellReuseIdentifier:@"cell2"];
或者是:
static NSString *identifer = @"cell";
static NSString *identifer2 = @"cell2";
//从池子中通过标识位获取
UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:identifer];
//取不到则创建
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer];
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifer];
//取不到则创建
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer2];
}
UITabalView 的代理协议方法
//选中某行的时候会调用
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
NSLog(@"click --%zd",indexPath.row);
}
//取消选择某行的时候会调用
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"click --%zd",indexPath.row);
}
//返回每行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
return 44;
}
return 54;
}
//返回每块头部对应的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return [_headerHeightArray[section] floatValue];
}
//返回每块尾部对应的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
if (section == 0) {
return 0.1;
}
return 0.1;
}
//返回一个视图到头部header ,可以不设置高度。
- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
return [UIView *];
}
//配置尾部视图
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
return nil;
}
//返回显示每行的删除按钮文本
- (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"删除";
}
//允许编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath{
return YES;
}
//返回编辑样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleDelete;
}
//处理编辑操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath{
//处理删除操作
if (editingStyle == UITableViewCellEditingStyleDelete) {
//删除数据
[self.allDataArray[indexPath.section]removeObjectAtIndex:indexPath.row];
//删除cell
[tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationFade];
}
}
//返回头部文本
- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [NSString stringWithFormat:@"是%ld块的头", section];
}
//返回尾部文本
- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{
return [NSString stringWithFormat:@"是%ld块的尾", section];
}
扩展知识点:UITableViewDelegate的协议是继承于UIScrollView,所以也能实现UIScrollViewDelegate的方法;
例如监听UITableView的滚动
//这个scrollView也能监听Table移动
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
}
错误将UIViewController 当做UITableViewController 来用
那怎么办呢? 在UIViewController里面的故事板把UIView删除,然后添加一个UITableViewController,然后改类(class)名为:对应的TableViewController类。 在这个情况下 也就是说self.view 和self.tableview是等价的
常见设置:
1、设置分割线
//表示设置分割线为无
_tableView.separatorStyle =UITableViewCellSeparatorStyleNone
//设置分割线的颜色
_tableView.separatorColor = [UIColor blackColor];
2、 设置选中的背景色
UIView * selectedBackgroundView =[[UIViewalloc]init];
selectedBackgroundView.backgroundColor = [UIColor redColor];
//给cell设置背景颜色,因为是设置view ,所以配置的时候可以给任何视图,例如image
cell.selectedBackgroundView = selectedBackgroundView;
3、设置默认的背景色
//设置默认背景色
cell.backgroundColor = [UIColor grayColor];
//同样也是设置背景颜色,但这个点优先级高一点
UIView * backgroundView =[[UIView alloc]init];
backgroundView.backgroundColor = [UIColor redColor];
//给cell设置背景颜色,因为是设置view ,所以配置的时候可以给任何视图,例如image
cell.backgroundView = backgroundView;
//表示设置指示器,什么是指示器,就像下图中的
//这个表示什么都没有
cell.accessoryType = UITableViewCellAccessoryNone;
//这个表示有打勾
cell.accessoryType = UITableViewCellAccessoryCheckmark;
//这个表示箭头
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
如果要自定义这个指示器
//自定义一个视图到指示器上面
cell.accessoryView = [[UISwitch alloc]init];
自定义等高cell
(今天遇到提取tag对应的视图时遇到了点问题,[self.view viewWithTag:1000]这句的意思是self.view去调用? 现在的理解是:因为tag=1000对应的视图是在父视图上面的,所以使用父视图来拿)
UITabalView 介绍与基本使用
标签:
原文地址:http://www.cnblogs.com/handada/p/5628067.html