我有一个 View UIViewController
(根)来处理广告和一个UINavigationController
。在该UINavigationController中,我具有典型的 Controller 层。在我的自定义设置表 View Controller 中,我有一个按钮可以与我联系以获得支持。当用户单击此按钮时,我将创建一个MFMailComposeViewController
并希望显示它。我无法从设置表格 View 中展示它,因为它会在我的广告下方,因此我需要引用根 View 并从那里展示它。我试过了self.parentViewController.parentViewController
,其中self是设置表 View ,但这不起作用。我应该如何引用。必须直接引用根 View 并将其传递给设置 View 似乎是一个糟糕的设计。
最佳答案
获取当前的keyWindow:
UIWindow *window = [UIApplication sharedApplication].keyWindow;
获取其rootViewController:
UIViewController *rootViewController = window.rootViewController;
注意:如果当前正在显示
UIAlertView
,则将创建一个新窗口并将其分配为keyWindow。可能还有其他一些异常(exception)情况,这些情况不会使您的应用程序窗口成为keyWindow。