如何关闭当前视图控制器并在iOS中推送另一个视图控制器

时间:2014-07-10 17:00:26

标签: ios uinavigationcontroller

我想关闭当前的视图控制器并转到下一页?

即关闭当前视图控制器并在堆栈上推送另一个视图控制器。

我可以使用以下代码关闭当前页面

[[self navigationController] popViewControllerAnimated: YES];

但是在此之后打开一个新的控制器是行不通的。

2 个答案:

答案 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。

但是,我怀疑这种行为是非常人性化的,因为你正在紧接着弹出并推动......非常令人困惑。但如果它适用于您的情况,您可以使用上面的代码确实这样做:)