关闭2个模态视图控制器

时间:2012-02-23 20:44:44

标签: objective-c ios

我有一个基本的模态视图控制器。然后我用:

创建第二个
FieldReportViewController *fieldReport = [self.storyboard instantiateViewControllerWithIdentifier:@"fieldReportView"];
[self presentModalViewController:fieldReport animated:YES];
从那里开始,我用第三个视图控制器调用:

ScoutingReportViewController *scoutingReport = [self.storyboard instantiateViewControllerWithIdentifier:@"ScoutView"];
[self setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentModalViewController:scoutingReport animated:YES];

现在我想返回第一个视图控制器。我试过了(这是目前显示的视图控制器):

-(IBAction)doneBtn
{
    //[self.parentViewController dismissModalViewControllerAnimated:YES];  //removed

    [self dismissModalViewControllerAnimated:NO];    //added

    [[NSNotificationCenter defaultCenter] postNotificationName:@"CloseAllModalViews" object:nil userInfo:nil];  //added

}

在中/视图控制器中,我在viewDidLoad中添加一个观察者:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(dismissModals:)
                                             name:@"CloseAllModalViews"
                                           object:nil];

和方法:

-(void) dismissModals:(id)sender
{
    [self dismissModalViewControllerAnimated:NO];
}

按下时,它什么都不做。它不会忽视任何观点。

任何想法我怎么能让它发挥作用?

编辑:找出崩溃的原因;我忘记了我在IB中添加了一个segue到我的完成按钮。这会导致内存问题并导致崩溃。

编辑2:这会将两个视图控制器都关闭回基本/第一个视图控制器。但它并没有给我任何动画。我可以在没有动画的情况下解散当前的VC并用动画解雇中间的VC,但是在转换之前我会看到中间的VC。如果可能的话,我更愿意拥有从当前VC到基础VC的动画。

1 个答案:

答案 0 :(得分:0)

我以前做过这个,我不得不使用UINotificationCenter来关闭中间视图。当您按下doneBtn时,发布通知。在推送其他视图之前,添加一个带有dismissModal作为操作的观察者。如果删除动画,它应该看起来就像你回到原始视图一样。

在您的视图中,您想要自动关闭:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(dismissModals:)
                                                 name:@"CloseAllModalViews"
                                               object:nil];

将它放在你的doneBtn方法中:

[[NSNotificationCenter defaultCenter] postNotificationName:@"CloseAllModalViews" object:nil userInfo:nil];