AppDelegate 从 m File + presentViewController 调用函数

Posted

技术标签:

【中文标题】AppDelegate 从 m File + presentViewController 调用函数【英文标题】:AppDelegate to call function from m File + presentViewController 【发布时间】:2018-06-05 21:32:31 【问题描述】:

我有一个 AdIntegrator.mm 文件,其中包含创建表单的函数:

 -(void)createAndDisplayForm
     AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate];          //add AppDelegate pointer
     _vc = app.window.rootViewController;

    //create form

    //presented using presentFromViewController:_vc
 

我希望能够在需要时从我的AppDelegate.mm 再次使用此表单(如果User 希望再次看到此表单)。

我怎么称呼它?

我在AppDelegate.mm 中尝试了以下操作,但未显示任何视图:

AdIntegrator* opt = [[AdIntegrator alloc] init];
[opt createAndDisplayForm];

谁能告诉我在 AppDelegate 中使用此功能的最佳方式,以及确保可以再次看到 presentFromViewController。谢谢。

【问题讨论】:

【参考方案1】:

让我解释一下,AppDelegate 是一个Singleton 对象,因此您可以在 AppDelegate.h 中声明 AdIntegrator 类,例如这个:

#import "AdIntegrator.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic) AdIntegrator *adIntegratorObject;

@end

在您的 AppDelegate.m 中,您需要这样做:

@interface AppDelegate ()
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    _AdIntegrator = [[AdIntegrator alloc] init];
    // or like this [AdIntegrator new];

    return YES;

_AdIntegrator 对象是 AppDelegate 单例中的引用 要从任何地方调用该方法,因此您可以从 OtherViewController.m 执行此操作,您需要在 OtherViewController.m 中 #import "AppDelegate.h" 来查看对象并调用方法:

- (void)methodExampleFromOtherViewController

    AppDelegate *appObject = (AppDelegate*)[[UIApplication sharedApplication] delegate];

    // Calling your method in adIntegratorObject class
    [appObject.adIntegratorObject YOUR_METHOD_CALL];

您可以将 presentViewController:animated:completion: 方法与 AppDelegate 调用的 AdIntegrator 对象一起使用 :)

【讨论】:

感谢您的帮助。代码可以编译,但由于某种原因它没有调用该函数。我在开头放了一个NSLog,但并没有那么远。我还必须使用[AdIntegrator new]; 我将文件 AppDelegate.h 修改为 #import "AdIntegrator.h" 现在方法可见了,对不起我的伙伴,我希望它对你有帮助:) 将来您可以创建自己的单例类并像这样在 AppDelegate.h 中声明单例并使用该对象中的其他类,因为您不想在 AppDelegate 中导入很多类.h :D

以上是关于AppDelegate 从 m File + presentViewController 调用函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AppDelegate.m 调用 ViewController.m 方法

无法从 appdelegate.m 为 NSProgressIndicator 设置动画

从 AppDelegate.m 中的 applicationDidEnterBackground 中去掉键盘

AppDelegate.m 的“application:didFinishLaunchingWithOptions”的默认实现是不是从 iOS 6 更改为 iOS 8?

如何从appdelegate调用方法[重复]

如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?