4

我尝试了 2 种方法来连续解散 2 个视图控制器,但只有其中一个被解散,而不是第二个

方法1

-(void) LoginDone:(NSNotification *)notif 
 {
 [self dismissViewControllerAnimated:YES completion:NULL];   //previous viewcontroller
 [self dismissViewControllerAnimated:YES completion:NULL];   //current viewcontroller
  }

方法2

-(void) LoginDone:(NSNotification *)notif 
{
[self dismissViewControllerAnimated:YES completion:NULL];
 [[NSNotificationCenter defaultCenter] postNotificationName:@"LoginDone2" object:nil];

 }

-(void) LoginDone2:(NSNotification *)notif 
{
     [self dismissViewControllerAnimated:YES completion:NULL];


 }

我需要找到一种方法来连续关闭以前的视图控制器和当前的视图控制器。

4

6 回答 6

8

这是一个老问题,但它似乎正是我目前遇到的问题。这是我所做的:

    [self.presentingViewController.presentingViewController
     dismissViewControllerAnimated:YES completion:nil];

它对我有用。我希望它对某人有用。

于 2014-03-12T02:21:09.513 回答
5

通过调用

 [self dismissViewControllerAnimated:YES completion:NULL];

您是在告诉您self要忽略它所呈现的视图。告诉同一个self对象两次关闭它呈现的视图,不会改变结果。换句话说self,根据您对代码的评论,不能同时表示“当前视图”和“上一个视图”。self只是代表单个视图的单个控制器,无论是当前视图还是前一个视图。

要解决这个问题,您应该发送dismissViewControllerAnimatedself(我假设呈现最顶层的视图)呈现前一个视图的另一个视图控制器对象。

换句话说,我会期待这样的事情:

-(void) LoginDone:(NSNotification *)notif 
{
   [self dismissViewControllerAnimated:YES completion:NULL];
   [self.previousController dismissViewControllerAnimated:YES completion:NULL];
}

实际上,您可以只向第二个视图控制器发送一条消息,并且两个视图都将被关闭(source):

如果您连续呈现多个视图控制器,从而构建一个呈现的视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都简单地从堆栈中删除。最顶层的视图使用其模态转换样式被解除,这可能与堆栈中其他视图控制器使用的样式不同。

于 2012-07-08T06:33:57.653 回答
1

我知道这是一个老问题,但也许有人会在这个问题上寻找解决方案,所以这里是:

-(void) closeModalViews 
{
    [previousVC dismissViewControllerAnimated:YES completion:^(void) {
        [self dismissViewControllerAnimated:YES];
    }];
}
于 2013-10-23T12:29:23.633 回答
1

我喜欢 JPetric 的想法,但首先您必须关闭当前视图控制器的视图,然后才能关闭当前视图控制器的视图。

    [self dismissViewControllerAnimated:NO completion:^(void) {
        [self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
    }];
于 2014-02-23T22:37:20.237 回答
0

据我所知,您正在尝试以下操作:

  1. 有 2 个视图控制器。
  2. 你希望他们两个都消失。
  3. 另一个控制器进来了。

但事实是只显示了一个控制器,为什么你需要关闭 2 呢?

于 2012-07-08T06:07:59.090 回答
0

您可以使用 self.view.hidden=true; 在跳转的视图控制器上,同时动画回到第一个视图控制器。使用 [self.presentingViewControllerdismiss...] 不隐藏对我不起作用。

于 2016-04-11T12:54:10.580 回答