我有一个 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。

08-08 03:25