仅关闭 2 个模态呈现的视图控制器中的 1 个

Posted

技术标签:

【中文标题】仅关闭 2 个模态呈现的视图控制器中的 1 个【英文标题】:Dismiss only 1 of 2 modally presented view controllers 【发布时间】:2015-12-02 00:28:25 【问题描述】:

将 UINavigation 控制器用作模态弹出框,然后呈现:

XYNavigationController *popoverNavigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"XYNavigationController"];
popoverNavigationController.modalPresentationStyle = UIModalPresentationPopover;
XYCartViewController *cartVC = (XYCartViewController *)popoverNavigationController.topViewController;
[self presentViewController:popoverNavigationController animated:YES completion:nil];

当点击按钮时,另一个控制器 XYEditViewController 以模态方式呈现在模态 popoverNavigationController 之上。 XYEditViewController 的取消按钮调用 unwind segue:

- (IBAction)unwindFromEdit:(UIStoryboardSegue *)segue 
    //a. [segue.sourceViewController dismissViewControllerAnimated:YES completion:nil];
    //b. [self.navigationController.topViewController dismissViewControllerAnimated:YES completion:nil];
    //c. [(XYCartViewController*)(segue.destinationViewController) dismissViewControllerAnimated:YES completion:nil];
    //d.
    [(XYNavigationController*)(((XYEditViewController*)(segue.sourceViewController)).presentingViewController) dismissViewControllerAnimated:YES completion:nil];

期望取消按钮只关闭顶部模态控制器,并尝试了上面所有的 a、b、c、d,它们都关闭了顶部和弹出框控制器。知道在这种情况下如何只解雇***控制器吗?

【问题讨论】:

【参考方案1】:

在弹出框内取消显示的控制器是一个大问题(即错误),并且在 ios 历史过程中这种行为已多次更改这一事实无济于事。我相信,基本上你不能为此使用 unwind segue。只需让取消按钮在显示的视图控制器中执行一个调用[self dismissViewControllerAnimated:] 的操作。

(您还必须处理用户在弹出框之外点击 会发生什么;默认情况下,这也可能会关闭整个配对,我认为这是错误的行为。)

【讨论】:

我有一个专门针对这个问题的可下载项目(来自我的书代码):github.com/mattneub/Programming-iOS-Book-Examples/tree/master/…

以上是关于仅关闭 2 个模态呈现的视图控制器中的 1 个的主要内容,如果未能解决你的问题,请参考以下文章

关闭模态呈现的视图控制器后切换标签栏控制器视图控制器

关闭两个模态视图控制器

如何一次关闭 3 个模态视图控制器?

为啥关闭视图控制器不会从内存中清除呈现的控制器?

呈现 2 个视图控制器,但只有一个过渡

关闭模态视图控制器后呈现不同的视图控制器