如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS

Posted

技术标签:

【中文标题】如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS【英文标题】:How to modally add a view to another view that is not in the view hierarchy iOS 【发布时间】:2014-05-16 17:05:54 【问题描述】:

我有 3 个视图控制器。

视图控制器 1 以模态方式显示视图控制器 2。

我用动画关闭视图控制器 2。

我希望这个动画消失以显示视图控制器 3,理想情况下它会从视图控制器 1 模态显示。

有什么办法可以做到吗?

一旦视图控制器 2 处于活动状态,我似乎无法向视图控制器 1 添加任何视图,所以我不确定实现这一点的最佳方法是什么。

【问题讨论】:

用更多细节更新您的问题,例如导致您的问题的相关代码。 我不认为代码在这里是相关的,因为我在询问最佳实践或者什么是可能的。我已经更新了更多细节。 不清楚你在问什么。您想在 VC 1 被模态 VC 2 覆盖时更改它?你是说当你解散 VC2 时,你希望 VC3 在它下面,所以当 VC2 动画消失时,VC3 就已经到位了?如果 【参考方案1】:

在视图控制器 2 上添加一个委托。视图控制器 1 将遵守此委托。当您关闭视图控制器 2 时,调用您的代理并同时从视图控制器 1 推送视图控制器 3,而不使用动画。

查看控制器 1:

- (void)viewController2Dismissed

    ViewController3 *viewController3 = [[ViewController3 alloc] init];

    [self.navigationController pushViewController:viewContrller3 animated:NO];

查看控制器 2 标题:

@protocol ViewController2Delegate;

@interface ViewController2 : UIViewController

@property (weak, nonatomic) id <ViewController2Delegate> delegate;

@end

@protocol ViewController2Delegate <NSObject>

- (void)viewController2Dismissed;

@end

View Controller 2 Dismissal 方法:

- (IBAction)modalCloseButtonTapped:(id)sender

    [self.delegate viewController2Dismissed];

    [self dismissViewControllerAnimated:YES completion:nil];

在 View Controller 1 中,您也可以在 View Controller 2 完成动画后以模态方式呈现 View Controller 3。这将动画视图控制器 2 然后动画视图控制器 3。如果它们都是模态视图控制器,我不建议尝试找到一种方法让视图控制器 3 在视图控制器 2 后面没有动画的情况下显示,因为它动画.您希望让您的用户知道他们在模态视图控制器中,并且必须与视图中的内容进行交互,然后才能返回正常流程。

【讨论】:

以上是关于如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 尝试呈现其视图不在窗口层次结构中

将关闭按钮添加到部分不在视图中的模态视图

如何将不在根层次结构中的 SwiftUI 视图呈现为 UIImage?

如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?

在切换期间关闭模态 UIViewController

无法以编程方式将视图添加到情节提要中的现有子视图