点击时,iOS将表格视图单元格设置为全屏动画

点击时,iOS将表格视图单元格设置为全屏动画,ios,animation,uitableview,Ios,Animation,Uitableview,我希望实现与此应用程序相同类型的功能: 当用户选择表格视图单元时,该单元将设置动画以填充整个屏幕,并在设置动画时显示新视图 我一直在努力寻找如何做到这一点的信息,但似乎找不到任何好的资源 我怎样才能做到这一点?即使只是一个正确使用谷歌搜索的想法也会非常有帮助 我不知道花式单位是如何做到这一点的,但我能够用这个例子复制它们的外观。初始视图控制器TableController是UIViewController子类,具有显示基本单元格的表视图。我在故事板中还有另一个控制器,ViewController

我希望实现与此应用程序相同类型的功能:

当用户选择表格视图单元时,该单元将设置动画以填充整个屏幕,并在设置动画时显示新视图

我一直在努力寻找如何做到这一点的信息,但似乎找不到任何好的资源


我怎样才能做到这一点?即使只是一个正确使用谷歌搜索的想法也会非常有帮助

我不知道花式单位是如何做到这一点的,但我能够用这个例子复制它们的外观。初始视图控制器TableController是UIViewController子类,具有显示基本单元格的表视图。我在故事板中还有另一个控制器,ViewController,它有一个不在表视图内的表视图单元,固定在其视图的顶部,视图约束为侧面和顶部,高度约束为44。我将此控制器作为子控制器添加,并将其视图添加到您单击的单元格上方,并在文本标签中为其指定单元格的帧、背景色和文本,然后将其设置为全屏动画。我在ViewController中定义了一个代理协议,当您单击单元格中的折叠按钮时,会调用该协议。该协议的单一方法expandedCellWillCollapse在TableController中实现,以使控制器返回动画。这是密码

#import "TableController.h"
#import "ViewController.h"

@interface TableController ()
@property (strong,nonatomic) NSArray *theData;
@property (weak,nonatomic) IBOutlet UITableView *tableView;
@property (strong,nonatomic) ViewController *expander;
@property (nonatomic) CGRect chosenCellFrame;
@end

@implementation TableController 


- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Black",@"Brown",@"Red",@"Orange",@"Yellow",@"Green",@"Blue"];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.contentView.backgroundColor = [UIColor colorWithHue:.1 + .07*indexPath.row saturation:1 brightness:1 alpha:1];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = self.theData[indexPath.row];
    return cell;
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    if (! self.expander) {
        self.expander = [self.storyboard instantiateViewControllerWithIdentifier:@"Expander"];
        self.expander.delegate = self;
    }
    [self addChildViewController:self.expander];
    self.expander.view.frame = [self.tableView rectForRowAtIndexPath:indexPath];
    self.expander.view.center = CGPointMake(self.expander.view.center.x, self.expander.view.center.y - self.tableView.contentOffset.y); // adjusts for the offset of the cell when you select it
    self.chosenCellFrame = self.expander.view.frame;
    self.expander.view.backgroundColor = [UIColor colorWithHue:.1 + .07*indexPath.row saturation:1 brightness:1 alpha:1];
    UILabel *label = (UILabel *)[self.expander.cell viewWithTag:1];
    label.text = self.theData[indexPath.row];
    [self.view addSubview:self.expander.view];
    [UIView animateWithDuration:.5 animations:^{
        self.expander.view.frame = self.tableView.frame;
        self.expander.collapseButton.alpha = 1;
    } completion:^(BOOL finished) {
        [self.expander didMoveToParentViewController:self];
    }];
}


-(void)expandedCellWillCollapse { // delegate method called from the collapse button in the expanded cell
    [self.expander willMoveToParentViewController:nil];
    [UIView animateWithDuration:.5 animations:^{
        self.expander.view.frame = self.chosenCellFrame;
        self.expander.collapseButton.alpha = 0;
    } completion:^(BOOL finished) {
        [self.expander.view removeFromSuperview];
        [self.expander removeFromParentViewController];
    }];
}

这不是一个竞争解决方案,但它应该让您开始。我在这里上传了这个项目,编辑于2014年4月12日,以使其适用于iOS 8。

我不知道Fancy Units是如何实现的,但我能够通过这个示例复制它们的外观。初始视图控制器TableController是UIViewController子类,具有显示基本单元格的表视图。我在故事板中还有另一个控制器,ViewController,它有一个不在表视图内的表视图单元,固定在其视图的顶部,视图约束为侧面和顶部,高度约束为44。我将此控制器作为子控制器添加,并将其视图添加到您单击的单元格上方,并在文本标签中为其指定单元格的帧、背景色和文本,然后将其设置为全屏动画。我在ViewController中定义了一个代理协议,当您单击单元格中的折叠按钮时,会调用该协议。该协议的单一方法expandedCellWillCollapse在TableController中实现,以使控制器返回动画。这是密码

#import "TableController.h"
#import "ViewController.h"

@interface TableController ()
@property (strong,nonatomic) NSArray *theData;
@property (weak,nonatomic) IBOutlet UITableView *tableView;
@property (strong,nonatomic) ViewController *expander;
@property (nonatomic) CGRect chosenCellFrame;
@end

@implementation TableController 


- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Black",@"Brown",@"Red",@"Orange",@"Yellow",@"Green",@"Blue"];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.contentView.backgroundColor = [UIColor colorWithHue:.1 + .07*indexPath.row saturation:1 brightness:1 alpha:1];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = self.theData[indexPath.row];
    return cell;
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    if (! self.expander) {
        self.expander = [self.storyboard instantiateViewControllerWithIdentifier:@"Expander"];
        self.expander.delegate = self;
    }
    [self addChildViewController:self.expander];
    self.expander.view.frame = [self.tableView rectForRowAtIndexPath:indexPath];
    self.expander.view.center = CGPointMake(self.expander.view.center.x, self.expander.view.center.y - self.tableView.contentOffset.y); // adjusts for the offset of the cell when you select it
    self.chosenCellFrame = self.expander.view.frame;
    self.expander.view.backgroundColor = [UIColor colorWithHue:.1 + .07*indexPath.row saturation:1 brightness:1 alpha:1];
    UILabel *label = (UILabel *)[self.expander.cell viewWithTag:1];
    label.text = self.theData[indexPath.row];
    [self.view addSubview:self.expander.view];
    [UIView animateWithDuration:.5 animations:^{
        self.expander.view.frame = self.tableView.frame;
        self.expander.collapseButton.alpha = 1;
    } completion:^(BOOL finished) {
        [self.expander didMoveToParentViewController:self];
    }];
}


-(void)expandedCellWillCollapse { // delegate method called from the collapse button in the expanded cell
    [self.expander willMoveToParentViewController:nil];
    [UIView animateWithDuration:.5 animations:^{
        self.expander.view.frame = self.chosenCellFrame;
        self.expander.collapseButton.alpha = 0;
    } completion:^(BOOL finished) {
        [self.expander.view removeFromSuperview];
        [self.expander removeFromParentViewController];
    }];
}
这不是一个竞争解决方案,但它应该让您开始。我在这里上传了这个项目,编辑日期为2014年4月12日,以使其适用于iOS 8