【问题标题】:How do I access the navigation controller from app delegate?如何从应用委托访问导航控制器?
【发布时间】:2023-03-20 23:38:01
【问题描述】:

我正在制作一个带有推送通知的应用程序,我希望该应用程序在收到通知时显示模式视图控制器或将视图推送到当前导航控制器上。我的应用程序委托中有 didReceiveRemoteNotification 获取通知,但现在我无法推送视图控制器,因为我无权访问导航控制器(或我可以使用的任何东西)。我看过其他帖子,他们创建导航控制器并在应用程序委托中执行所有操作,但我使用了界面构建器,因此对我来说如何访问它并不明显。推送新视图控制器或显示模式的最佳方式是什么?

感谢任何提示/建议!

【问题讨论】:

  • 发布您当前的应用程序didfinishlaunching:withoptions 方法

标签: iphone uinavigationcontroller push-notification


【解决方案1】:

最简单的方法可能是为您的应用程序委托创建一个类型为 uinavigationcontroller 的属性,然后只需从属于您的应用程序导航控制器的屏幕之一进行设置。如果您只想访问它,这对我有用,而且非常容易。有明显的警告,但假设您的应用程序可以等待从应用程序委托使用导航控制器,直到第一个屏幕启动之后......那么我认为你很好。

从您的主页视图:

IQAppDelegate *appDelegate = (IQAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate setNaviController:[self navigationController]];

【讨论】:

    【解决方案2】:

    您可以使用 NSNotificationCenter 重新发布来自应用程序委托的信息,并让您的视图逻辑调用 addObserver 以便它接收此通知。

    这样,您可以让 UI 的不同部分以不同的方式响应,而无需将这些知识集中在应用委托中。

    【讨论】:

    • 谢谢,这听起来像是我想做的。今晚我试试
    • 这正是我所需要的!
    【解决方案3】:

    我建议不要尝试通过 AppDelegate 访问导航控制器,而是添加一个单例类来处理整个应用程序中的屏幕。这个屏幕管理器将负责在视图之间添加/删除/切换,同时确保所有视图控制器在完成后正确释放。这样,您可以访问您所在的当前屏幕,并按照您所说的那样呈现一个模态视图控制器(确保您的所有视图控制器都实现了一个特定的协议,该协议声明了一个方法来执行此操作,以便清洁和正确编码)。祝你好运!

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2019-02-13
      相关资源
      最近更新 更多