【问题标题】:Dismiss 2 modal view controllers关闭 2 个模态视图控制器
【发布时间】:2012-02-23 20:44:43
【问题描述】:

我有一个基本的模态视图控制器。然后我创建第二个:

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

}

在中间/s视图控制器中,我在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 的动画。

【问题讨论】:

  • 在设备上运行控制台时没有提示?构建时来自 xcode 的任何警告?
  • 不,当我在 ipad 上运行控制台时,控制台中没有崩溃信息。我注意到 xcode 4.2 提供的反馈比以前版本的崩溃要少得多。 =/
  • 如果你的第一个视图控制器是一个导航控制器,你可以使用popToRootViewControllerAnimated:。想换吗?

标签: objective-c ios


【解决方案1】:

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

在您看来,您希望自动关闭:

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

把它放在你的 doneBtn 方法中:

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

【讨论】:

  • 太棒了,这确实有效。唯一的缺点是我没有很好的过渡。如果我为当前模态设置动画,则中间模态不会关闭(我猜测,因为当前模态正在动画地关闭,第二次关闭会丢失)。我无法为当前模态设置动画并为中间模态设置动画,但随后我在过渡前简要地看到了第二个模态。我也无法制作动画,直接进入基本模式。我希望有一些动画过渡,你认为这可能吗? (我将使用新代码更新帖子)
  • 如果您希望它们正确设置动画,您可能需要添加一些延迟或时间。我承认这不是解决问题的最优雅的方法,但它确实有效。如果您找到一个不错的解决方法,请发布。
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 2011-06-24
  • 2013-01-01
相关资源
最近更新 更多