iOS开发UI篇-实现tableView的层级显示,iostableview
分类:计算机教程

iOS开发UI篇-实现tableView的层级显示,iostableview

 进来要实现一个tableView 的cell层级显示,网上找的思路都各不相同.下面说一下我的实现思路.

 根据根标题存储cell的展开状态,添加到字典中.

 话不多说,直接上代码.

男篮世界杯赔率, 

 

#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

@interface CellTreesController ()<UITableViewDelegate,UITableViewDataSource>

@property(nonatomic,strong)UITableView *MyTableView;

@property(nonatomic,strong)NSMutableArray *dataArray;//存放标题

@property(nonatomic,strong)NSMutableDictionary *boolDcitionary;//存放对应分区section是否展开

@end

@implementation CellTreesController

- (void)viewDidLoad {
    [super viewDidLoad];

    _MyTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) style:UITableViewStylePlain];
    _MyTableView.dataSource = self;
    _MyTableView.delegate = self;
    _MyTableView.tableFooterView = [UIView new];
    [self.view addSubview:_MyTableView];

    //组头数据
    for (int i = 0; i < 20; i   ) {

        NSString *titleString = [NSString stringWithFormat:@"第%d组",i   1];
        [self.dataArray addObject:titleString];
    }


    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - dalegate dataSource

//区头视图高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    return 44;
}

//区头视图
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 44)];
    UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(20, 7, 150, 30)];
    lable.text = self.dataArray[section];
    lable.textColor = [UIColor orangeColor];
    headerView.tag = 1000   section;
    //添加手势->控制cell的展开
    [headerView addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickView:)]];
    [headerView addSubview:lable];
    return headerView;
}

//section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 20;
}

//row
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    NSString *clickTag = [NSString stringWithFormat:@"%ld",section   1000];

    if ([self.boolDcitionary[clickTag] integerValue] == 1) {
        return 6;

    }else{

        return 0;
    }
}

//cell
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"myTableViewCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }

    cell.textLabel.text = [NSString stringWithFormat:@"第%ld行",indexPath.row   1];

    return cell;

}


#pragma mark - tap手势点击事件

- (void)clickView:(UITapGestureRecognizer *)action{

    NSString *clickTag = [NSString stringWithFormat:@"%ld",action.view.tag];

     //第二个cell展开时仍然保持前一个cell的展开状态
    //状态为0 代表关闭
    if ([self.boolDcitionary[clickTag] integerValue] == 0) {

        [self.boolDcitionary setValue:@(1) forKey:clickTag];

    }else{
        //状态为1 代表展开
        [self.boolDcitionary setValue:@(0) forKey:clickTag];
    }


//    //第二个cell展开时自动关闭之前展开的cell
//    //状态为0 代表关闭
//    if ([self.boolDcitionary[clickTag] integerValue] == 0) {
//        
//        for (int i = 1000; i < (1000   20); i  ) {
//            NSString *clickStr = [NSString stringWithFormat:@"%d",i];
//            if ([clickStr isEqualToString:clickTag]) {
//                
//                [self.boolDcitionary setValue:@(1) forKey:clickStr];
//                
//            }else{
//                
//                [self.boolDcitionary setValue:@(0) forKey:clickStr];
//            }
//            
//        }
//    }else{
//        //状态为1 代表展开
//        [self.boolDcitionary setValue:@(0) forKey:clickTag];
//    }




    //刷新tableView(不可少)
    [_MyTableView reloadData];

}


#pragma mark - 懒加载
-(NSMutableDictionary *)boolDcitionary{
    if (!_boolDcitionary) {
        _boolDcitionary = [NSMutableDictionary dictionary];
    }
    return _boolDcitionary;
}

- (NSMutableArray *)dataArray{
    if (!_dataArray) {
        _dataArray = [NSMutableArray array];
    }
    return _dataArray;
}

 

 那么又有人问了,我的cell虽然展开了,但是都是直上直下得展开,还没有一点动画效果.下面给大家介绍一下cell展开的动画效果实现.

  实现下面UITableViewDelegate的方法

  - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

写一个UITableViewCell的简单动画效果.

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    CATransform3D rotation;
    rotation = CATransform3DMakeRotation( (90.0*M_PI)/180, 0.0, 0.7, 0.4);
    rotation.m34 = 1.0/ -600;

    cell.layer.shadowColor = [[UIColor blackColor]CGColor];
    cell.layer.shadowOffset = CGSizeMake(10, 10);
    cell.alpha = 0;
    cell.layer.transform = rotation;

    [UIView beginAnimations:@"rotation" context:NULL];
    [UIView setAnimationDuration:0.8];
    cell.layer.transform = CATransform3DIdentity;
    cell.alpha = 1;
    cell.layer.shadowOffset = CGSizeMake(0, 0);
    [UIView commitAnimations];
}

 

http://www.bkjia.com/IOSjc/1127567.htmlwww.bkjia.comtruehttp://www.bkjia.com/IOSjc/1127567.htmlTechArticleiOS开发UI篇-实现tableView的层级显示,iostableview 进来要实现一个tableView 的cell层级显示,网上找的思路都各不相同.下面说一下我的实现思路....

本文由美洲杯赔率发布于计算机教程,转载请注明出处:iOS开发UI篇-实现tableView的层级显示,iostableview

上一篇:一款基于jQuery多图切换焦点图插件,jquery多图切 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • Linux find tar -type 备份日志
    Linux find tar -type 备份日志
    这几天系统出现一个bug,需要截取日志供研发研究: find精华应用 $ ls -lrt   …… find  path  -option  [  -print ]  [ -exec  -ok  command ]  {} ; -rw-r-----   1 jrtu  
  • 男篮世界杯赔率:创建自己的Gubuntu
    男篮世界杯赔率:创建自己的Gubuntu
    #1,确保你的网络环境连通 关于安装,该主题最好在 gnome 3.16 上安装, 3.14 也测试过。 sudo apt-get install gnome-tweak-tool Server = http://downloads.sourceforge.net/project/
  • Linux下安装炫丽而强大的Dock:Docky
    Linux下安装炫丽而强大的Dock:Docky
    Docky是从GNOME Do项目剥离出来的一个Dock软件,最初即为GNOMEDo的“Docky”模式。 后来开发者觉得,GNOMEDo是个快速启动工具,弄个Docky模式有点不伦不类,于是
  • PHP实现Soap通讯的方法
    PHP实现Soap通讯的方法
    本文实例讲述了PHP实现Soap通讯的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下: ?php function HttpSoap($server, $port, $url, $namespace, $act
  • 男篮世界杯赔率php结合js实现点击超链接执行删除
    男篮世界杯赔率php结合js实现点击超链接执行删除
    如题,本次是要实现点击超链接实现执行js代码,并确认是否删除数据库数据,采用php。 首先链接数据库,查询数据库数据: 复制代码 代码如下: ?php $db