iOS實現先無動畫pop再push,替換當前控制器
1.先pop 發送通知或代理在前一個頁面執行push操作
iOS開發中會遇到添加成功,發送成功……類似情況,需要先將push前的頁面移除調。如果直接調用pop,立刻去push。如果這兩個命令寫在同一個控制器中,則會發現push根本沒有被執行……因為pop已經將該控制器移除,push根本沒有機會執行。也可以在上一個控制器通過代理/通知/閉包等操作。
這種方法有弊端,有可能會push多次不等。頁面交互非常不好。
2.改變控制器在棧中的位置
所以就選擇了下面的方法,先移除路由棧中當前控制器,再新增新的控制器,最后賦值。
// 新建將要push的控制器
MyGroupDetailViewController *detail = [[MyGroupDetailViewController alloc]init];
detail.groupId = groupId;
// 獲取當前路由的控制器數組
NSMutableArray *vcArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
// 打印當前路由的控制器數組
NSLog(@"1==the vcArray is %@", vcArray);
// 獲取檔期控制器在路由的位置
int index = (int)[vcArray indexOfObject:self];
// 移除當前路由器
[vcArray removeObjectAtIndex:index];
NSLog(@"2==the vcArray is %@", vcArray);
// 添加新控制器
[vcArray addObject: detail];
// 打印新增后的控制器數組
NSLog(@"3==the vcArray is %@", vcArray);
// 重新設置當前導航控制器的路由數組
[self.navigationController setViewControllers:vcArray animated:YES];