iOS点击时将表格视图单元格全屏显示

我想实现与此应用程序相同types的function: https : //itunes.apple.com/us/app/fancy-units/id850306139?mt = 8

当用户select一个表视图单元格时,单元格animation填充整个屏幕,并在animation时显示一个新的视图。

我一直在试图find如何做到这一点的信息,但似乎不能find任何好的资源。

我怎样才能做到这一点? 即使只是一个想法,什么正确的谷歌search将是非常有益的!

我不知道Fancy Units是怎么做的,但是我能够用这个例子复制他们的外观。 初始视图控制器(TableController)是一个UIViewController子类,具有显示基本单元格的表格视图。 我在故事板中有另一个控制器,ViewController有一个单一的表格视图单元格(不在表格视图内)固定在其视图顶部(约束的边和顶部,高度约束44)。 我将这个控制器添加为子控件,并将其添加到单击单元格顶部的视图上,并将单元格的框架,背景色和文本添加到文本标签中,然后将其animation显示为全屏。 我有一个在ViewController中定义的代理协议,当你单击单元格中的折叠button时,会调用它。 该协议的单一方法expandedCellWillCollapse在TableController中实现,以使控制器回退animation。 这是代码,

#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]; }]; } 

这不是一个有竞争力的解决scheme,但它应该让你开始。 我已经在这里上传了这个项目(编辑12/04/14使它适用于iOS 8), http: //jmp.sh/VKeIJLW。