如何在应用程序委托iOS10 Objective C中的applicationWillEnterForeground方法中以模态方式呈现UIViewController

Posted

技术标签:

【中文标题】如何在应用程序委托iOS10 Objective C中的applicationWillEnterForeground方法中以模态方式呈现UIViewController【英文标题】:How to present modally UIViewController in applicationWillEnterForeground method in app delegate iOS10 Objective C 【发布时间】:2016-11-08 13:43:45 【问题描述】:

我想在进入前台应用程序时展示一个 UIViewController。 我在 Objective C appDelegate 应用程序的 applicationWillEnterForeground 方法中使用此代码,但它不适用于我。

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
PasscodeViewController *vc = [sb instantiateViewControllerWithIdentifier:@"passcodeVCID"];
[self presentViewController:vc animated:YES completion:nil];

【问题讨论】:

你认为 appDelegate 中的 self 是什么? 我习惯在 uiviewcontroller 中使用 SELF。有作品。但我不知道如何在这里处理。 那是因为在 UIViewController 类中,self 是一个 ViewController。 presentViewController 是在 UIViewController.h 中定义的方法,因此它在那里工作。在 AppDelegate 中,self 是 AppDelegate,它没有名为 presentViewController 的方法。 您需要先访问您当前可见的 VC,然后使用该实例调用 presentViewController 方法。请参阅this answer 了解如何获取当前可见的 VC。 【参考方案1】:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
PasscodeViewController *vc = [sb instantiateViewControllerWithIdentifier:@"passcodeVCID"];

// Need to present with rootviewcontroller

[self.window.rootViewController presentViewController:vc animated:YES completion:nil];

【讨论】:

我将此代码用于 applicationWillEnterForeground 方法,但它不起作用。 尝试一次 [self.window.rootViewController.navigationController presentViewController:vc animated:YES completion:nil];

以上是关于如何在应用程序委托iOS10 Objective C中的applicationWillEnterForeground方法中以模态方式呈现UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

Objective-c (iOS) 中常见的 HTTP 请求委托模式

委托如何工作和委托在objective-c中的工作流程

Objective C iOS 预加载视图

将 Objective-C 委托方法与 swift 文件混合

在 Swift 上委托 Objective-C 协议

Objective-C – 从应用程序委托向视图控制器发送消息