0%

iOS实现先无动画pop再push,替换当前控制器

iOS实现先无动画pop再push,替换当前控制器

iOS开发中会遇到添加成功,发送成功……类似情况,需要先将push前的页面移除调。如果直接调用pop,立刻去push。如果这两个命令写在同一个控制器中,则会发现push根本没有被执行……因为pop已经将该控制器移除,push根本没有机会执行。也可以在上一个控制器通过代理/通知/闭包等操作——没有亲测,感觉麻烦。


所以就选择了下面的方法,先移除路由栈中当前控制器,再新增新的控制器,最后赋值。

废话不多说,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 新建将要push的控制器
NewViewController *newVC = [[NewViewController alloc] init];

// 获取当前路由的控制器数组
NSMutableArray *vcArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];

// 打印当前路由的控制器数组
NSLog(@"==the vcArray is %@", vcArray);

// 获取档期控制器在路由的位置
int index = (int)[vcArray indexOfObject:self];

// 移除当前路由器
[vcArray removeObjectAtIndex:index];

// 添加新控制器
[vcArray addObject: newVC];

// 打印新增后的控制器数组
NSLog(@"==the vcArray is %@", vcArray);

// 重新设置当前导航控制器的路由数组
[self.navigationController setViewControllers:vcArray animated:YES];

// over 有其他好方法欢迎一起学习。