如何检测您的 ViewController 是不是是从 AppDelegate 推送的?

Posted

技术标签:

【中文标题】如何检测您的 ViewController 是不是是从 AppDelegate 推送的?【英文标题】:How to detect if your ViewController was pushed from AppDelegate?如何检测您的 ViewController 是否是从 AppDelegate 推送的? 【发布时间】:2013-11-18 21:09:25 【问题描述】:

在我的 AppDelegate 中,如果用户键入我的自定义 url 方案,我会显示一个 ViewController。它在我的 ViewController 出现时起作用。但是,我需要检测我的 ViewController 是否是从 App 委托推送的。执行此操作的最佳方法或行动方案是什么?我只想检测它是否来自 AppDelegate 而不是其他地方。

           - (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
   sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation 
// attempt to extract a token from the url

  ViewController *controller = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
 [self.navigationController pushViewController:controller animated:YES];

编辑:为了澄清我想要做得更好的事情,当 appdelegate 呈现我的视图控制器时,我需要能够在我的视图控制器内部检测到它出现是因为 app 委托中的方法。有点像这样

视图控制器

-(void) ViewDidLoad
          if (this controller was presented from App delegate)
          do this
        
         else
          do nothing
          

【问题讨论】:

你应该更详细地解释你的主要问题。你想解决什么问题?你为什么关心它是从哪里推送的?你有没有机会从其他地方推动这个控制器? App Delegate 永远不会神奇地移除你的控制器,所以如果它被推送(当你说“推送”时,我假设你的意思是“解雇”),那么你的代码就做到了,你可以看到。如果您的意思是“推动”某些东西出现在它面前,那么如果您的 App Delegate 发生这种情况,那就是您在做这件事。如果您的意思是“推送”其他一些代码从您的代码中显示另一个视图控制器,您始终可以实现viewWillDisappear,但我不知道在这种情况下您所说的“仅来自 AppDelegate”是什么意思。 【参考方案1】:

简单地这样做:

 - (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
       sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation 

     ViewController *controller = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
     [self.navigationController pushViewController:controller animated:YES];

// here you know that your controller is pushed from the AppDelegate, then you can do other things just after the push

    [controller callControllerPublicMethod];
    

当你将它推入另一个控制器时,根本不做任何事情。

【讨论】:

【参考方案2】:

为什么不在ViewController 中编写您自己的自定义初始化方法,并在从应用委托调用时将参数设置为true,而在其他任何地方将其设置为false。

【讨论】:

以上是关于如何检测您的 ViewController 是不是是从 AppDelegate 推送的?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测您的 Microsoft Access 应用程序是不是已编译,即作为 ACCDE 运行

如何仅使用代码在您的 iOS 应用程序中显示 ViewController?

检测您的网站是不是在后台运行

如何检测抽屉是不是关闭?

检测ViewController是否显示为FormSheet

如何检测变量是不是包含任何内容