仅关闭 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 个的主要内容,如果未能解决你的问题,请参考以下文章