连续解除2个ViewController

jas*_*ite 4 viewcontroller ios

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

方法1

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

方法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];


 }
Run Code Online (Sandbox Code Playgroud)

我需要找到一种方法来连续解除之前的viewcontroller和当前的viewcontroller.

Mic*_*hel 8

这是一个古老的问题,但它似乎正是我目前遇到的问题.我在这做了什么:

    [self.presentingViewController.presentingViewController
     dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

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


ser*_*gio 5

通过电话

 [self dismissViewControllerAnimated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

你要告诉self他们放弃它提出的观点.告诉两次相同的self对象以消除它所呈现的视图,不会改变结果.换句话说self,根据您对代码的评论,不能同时代表"当前视图"和"上一个视图".self只是一个表示单个视图的控制器,无论是当前视图还是前一个视图.

要解决此问题,您应该发送dismissViewControllerAnimatedto self(显示最顶层的视图,我假设)发送前一个视图的另一个视图控制器对象.

换句话说,我希望这样的事情:

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

实际上,您只能向第二个视图控制器发送一条消息,并且两个视图都将被解除():

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