动态展开tableView的cell[1]

  • 时间:
  • 浏览:1
  • 来源:5分PK10_5分PK10官网

源码:

以下有有另一一个地方是相互配合的,但还是难以处里重用大问题-_-!!!!

本人 运行时的效果如下图:

//
//  RootViewController.m
//  ExpendTableView
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "YXCell.h"

@interface RootViewController ()<UITableViewDataSource, UITableViewDelegate>

{

    BOOL  flag[10];

}

@property (nonatomic, strong) UITableView      *tableView;

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    _tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                              style:UITableViewStylePlain];
    _tableView.delegate   = self;
    _tableView.dataSource = self;
    
    [self.view addSubview:_tableView];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (flag[indexPath.row] == YES)
    {
        return 100.f;
    }
    else
    {
        return 70.f;
    }
}

//==============================================
#pragma mark  根据cell情形进行相关设置
//==============================================
-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"aCell";
    YXCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[YXCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                             reuseIdentifier:CellIdentifier];
    }
    
    // 选者时没法颜色
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    if (flag[indexPath.row] == YES)
    {
        [UIView animateWithDuration:1.f animations:^{
            cell.showView.frame = CGRectMake(0, 0, 100, 100);
        }];
    }
    else
    {
        cell.showView.frame = CGRectMake(-100, 0, 100, 100);
    }
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (flag[indexPath.row] == NO)
    {
        for (int i = 0; i < 10; i++)
        {
            flag[i] = NO;
        }
        
        flag[indexPath.row] = YES;
        
        [tableView beginUpdates];
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationAutomatic];
        [tableView endUpdates];
    }
    else
    {
        flag[indexPath.row] = NO;
        
        [tableView beginUpdates];
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationAutomatic];
        [tableView endUpdates];
    }
}

@end

//
//  YXCell.m
//  ExpendTableView
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "YXCell.h"

@implementation YXCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {
        _showView = [[UIView alloc] initWithFrame:CGRectZero];
        _showView.backgroundColor = [UIColor redColor];
        [self addSubview:_showView];
    }
    return self;
}

@end

着实作者写的demo很好看,另有有另一一个,你没法理解他是为什在么在玩的-_-!!,不信,给你去下载他的demo试一下:)

RootViewController.m

动态展开tableView的cell[1]

着实笔者深刻理解他的原理,为什让尝试着本人 写了有有另一一个,不过,那恶心的重用大问题,不本人 亲自动手是不理解别人写代码的用心良苦的-_-!!!!!

附录:

为什在么在实现冗杂逼格高的动画?这名 就时需你的想象力来脑补了-_-!!,没法实现没哟来的效果,不都可不还可以想没哟来的效果:)

关键的几步:

源码地址:https://github.com/xerxes235/HVTableView

先共享源码供君尝试: