多个navigationControllers,当前“topViewController”中的调用方法

时间:2013-04-09 15:04:34

标签: iphone methods callback appdelegate

问题出在标题中。我写了“topViewController”来表示用户当前正在查看的全屏视图。无论应用程序是使用0,1还是多个navigationControllers,我都在寻找从App Delegate执行此操作的通用方法。

我可以为当前应用解决此问题,但使用特殊情况代码。有时您希望在App Delegate中放置一个通用方法并让它触发回调。我可以使用respondsToSelector,但它会对单独命名的回调方法进行(对我而言)丑陋的查找。

对我来说这只是一个有趣的问题(当然正在运行的应用程序必须知道!)并且在您的军械库中使用通用解决方案会很好。

1 个答案:

答案 0 :(得分:0)

您是否在App Delegate中引用了导航控制器,其中包含您要调用方法的顶视图控制器?如果是这样,UINavigationController有一个名为topViewController的成员。您可以将其强制转换为自定义视图控制器类:

CustomViewController *customController = (CustomViewController *)[aNavController topViewController];
[customController myCustomMethod];

正如我所说,如果你在App Delegate中引用了导航控制器,这个方法就可以了。

如果没有,另一种方法可能是使用NSNotificationCenter。在“topViewController”中注册自定义通知名称,并从App Delegate发布该通知。如果您在每个视图控制器可见时注册通知,并在它消失时取消注册,则只有可见视图控制器才会收到通知:

在您的情况下注册,可能在viewDidAppear:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myCustomMethod:) name:@"MyCustomNotification" object:nil];

发布应用代表的通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyCustomNotification" object:myAccount];

不要忘记删除viewDidDisappear:

中的观察者
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyCustomNotification" object:nil];