我的需求类似百度云App那样可以给一个文件夹无限层级的创建子文件夹,最终这个文件夹下面有多少层子文件夹是由用户决定的。

最初我的理解是ViewControllerA push至ViewControllerB后,ViewControllerA不能被释放,否则ViewControllerB无法pop回ViewControllerA,但是按这样理解就只能创建几十个ViewController预留给用户。但是弊端很明显,一是创建ViewController工作量太大,二是当push层级太多时,前面的ViewController占用内存太高。

后来通过测试,发现其实用两个ViewController来回跳转就能实现这个需求。

我是在UITableViewCell点击中实现的跳转

//ViewController A->B

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    SecondViewController * secondVC=[[SecondViewController alloc] init];
    [self.navigationController pushViewController: secondVC animated:YES];
}
//ViewController B->A

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    FirstViewController * firstVC=[[FirstViewController alloc] init];
    [self.navigationController pushViewController: firstVC animated:YES];
}

最后要注意处理rootViewController,否则两个ViewController来回跳转会造成rootViewController丢失,导致跳转动画效果丢失。

如果想偷懒,也可以调用激活动画的方法,跳转动画就不会丢失了。

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    [UIView setAnimationsEnabled:YES];
}