How to push two view controllers but animate transition only for the second one?
Solution 1:
The solution you're looking for if you're in the firstVC:
NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:secondVc];
[controllers addObject:thirdVC];
[self.navigationController setViewControllers:controllers animated:YES];
This will animate in the thirdVC without the secondVc becoming visible in the process. When the user press the back button, they will return to the secondVc
Solution 2:
To preserve the standard animation for pushing a view controller, in Swift:
let pushVC = UIViewController()
let backVC = UIViewController()
if let navigationController = navigationController {
navigationController.pushViewController(pushVC, animated: true)
let stackCount = navigationController.viewControllers.count
let addIndex = stackCount - 1
navigationController.viewControllers.insert(backVC, atIndex: addIndex)
}
This displays pushVC
normally and inserts backVC
into the navigation stack, preserving both the animation and the history for the UINavigationController
.
You can use setViewControllers
, but you'll lose the standard push animation.