0

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

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

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

4

1 回答 1

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];

发布来自您的 App Delegate 的通知:

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

不要忘记删除观察者viewDidDisappear:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyCustomNotification" object:nil];
于 2013-04-09T17:25:43.687 回答