我想关闭当前的视图控制器并转到下一页?
即关闭当前视图控制器并在堆栈上推送另一个视图控制器。
我可以使用以下代码关闭当前页面
[[self navigationController] popViewControllerAnimated: YES];
但是在此之后打开一个新的控制器是行不通的。
答案 0 :(得分:4)
同时调用自我的推送和弹出功能将无效,因为已经删除了self。您需要处理视图控制器堆栈 -
UINavigationController *navigationController = self.navigationController;
NSMutableArray *activeViewControllers=[[NSMutableArray alloc] initWithArray: navigationController.viewControllers] ;
[activeViewControllers removeLastObject];
// Reset the navigation stack
[navigationController setViewControllers:activeViewControllers];
[navigationController pushViewController:yourViewController animated:YES];
除此之外,如果你不想要这个视图控制器,当从你的新视图控制器弹出时,你还有其他选择。
赞firstVC
- > secondVC
- > thirdVC
现在来自thirdVC
如果你想直接来firstVC
(跳过secondVC,我相信这就是你想要推送和弹出的原因)。然后,为此您可以使用 - popToViewController
。
[self.navigationController popToViewController:firstVC animated:YES];
刚检查了同一主题已经有几个问题,你也可以参考这些问题以获得好的意见和答案 -
How can I pop a view from a UINavigationController and replace it with another in one operation?
popping and pushing view controllers in same action
How to pop a viewController and then Push a viewController through delegation
答案 1 :(得分:1)
你可以这样做:
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[self.navigationController pushViewController:viewController animated:YES];
}];
[self.navigationController popToViewController:firstVC animated:YES];
[CATransaction commit];
这将弹出'firstVC'并在弹出动画结束后立即推送新的viewController。
但是,我怀疑这种行为是非常人性化的,因为你正在紧接着弹出并推动......非常令人困惑。但如果它适用于您的情况,您可以使用上面的代码确实这样做:)