UITabalView 介绍与基本使用

Posted 韩大大的ios博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITabalView 介绍与基本使用相关的知识,希望对你有一定的参考价值。

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:@"标识"];
 
    return cell;
}
 
 

 
第三种复用的方法
 
如果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 介绍与基本使用的主要内容,如果未能解决你的问题,请参考以下文章

Oracle基本介绍与基本使用

Celery框架的基本使用与介绍

Ajax--express框架介绍与基本使用

8.2.1 QMediaPlayer类介绍与基本使用

三天入门 Docker - 第一天:Docker 基本介绍与使用

axios 全攻略之基本介绍与使用(GET 与 POST)