如何从app delegate访问导航控制器?

时间:2011-10-14 23:38:15

标签: iphone uinavigationcontroller push-notification

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

感谢您的任何提示/建议!

3 个答案:

答案 0 :(得分:2)

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

从您的主页视图:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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