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

Dismiss only 1 of 2 modally presented view controllers

一个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 的取消按钮调用展开转场:

- (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,它们都关闭了顶部和弹出控制器。知道在这种情况下如何只解散最高控制器吗?

在弹出框内关闭呈现的控制器是一个大问题(即错误),而且在 iOS 历史过程中此行为已更改多次这一事实也无济于事。我相信,基本上您将无法为此使用放松转场。只需让“取消”按钮在调用 [self dismissViewControllerAnimated:].

的显示视图控制器中执行操作即可

(您还必须解决用户在 弹出窗口外 点击时发生的情况;默认情况下,这也可能会忽略整对,我认为这是错误的行为。)