关闭 2 个模态视图控制器
Posted
技术标签:
【中文标题】关闭 2 个模态视图控制器【英文标题】:Dismiss 2 modal view controllers 【发布时间】: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:
。想换吗?
【参考方案1】:
我以前做过这个,我不得不使用 UINotificationCenter 来关闭中间视图。当您按下 doneBtn 时,发布通知。在推送其他视图之前,添加一个以您的dismissModal 作为操作的观察者。如果您删除动画,它应该看起来就像您刚刚回到原始视图。
在您看来,您希望自动关闭:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(dismissModals:)
name:@"CloseAllModalViews"
object:nil];
把它放在你的 doneBtn 方法中:
[[NSNotificationCenter defaultCenter] postNotificationName:@"CloseAllModalViews" object:nil userInfo:nil];
【讨论】:
太棒了,这确实有效。唯一的缺点是我没有很好的过渡。如果我为当前模态设置动画,则中间模态不会关闭(我猜测,因为当前模态正在动画地关闭,第二次关闭会丢失)。我无法为当前模态设置动画并为中间模态设置动画,但随后我在过渡前简要地看到了第二个模态。我也无法制作动画,直接进入基本模式。我希望有一些动画过渡,你认为这可能吗? (我将使用新代码更新帖子) 如果您希望它们正确设置动画,您可能需要添加一些延迟或时间。我承认这不是解决问题的最优雅的方法,但它确实有效。如果您找到一个不错的解决方法,请发布。以上是关于关闭 2 个模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章