在iOS4.2 / iPhone4中
现在我可以看到我的app delegate在最后一步之后选中它时会收到一条消息“applicationDidBecomeActive”,但是我的viewController(当前显示的视图的人)如何知道?
viewDidLoad已被调用,因此不会再次调用。不会再次调用viewWillLoad。
似乎无法弄明白。我问的原因是我想检查是否有任何设置更改,但是想在视图控制器中执行此操作,因为这是关心的事情。
答案 0 :(得分:12)
使用NSNotificationCenter
通知视图控制器中的UIApplicationDidBecomeActiveNotification
个事件。
答案 1 :(得分:5)
在你的appDelegate applicationDidBecomeActive
中放了这个:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
UINavigationController *navc = (UINavigationController *)[tabBarController selectedViewController];
UIViewController *topvc = [navc topViewController];
if ([topvc respondsToSelector:@selector(viewControllerDidBecomeActive)])
{
[topvc performSelector:@selector(viewControllerDidBecomeActive)];
}
}
这将获得在屏幕上看到的viewController。您只需在每个viewControllers上实现viewControllerDidBecomeActive
;)
答案 2 :(得分:0)
在appDelegate applicationDidBecomeActive中设置一个布尔属性,标记它刚出现在背景中。
然后在你的viewcontroller中,特别是在viewDidAppear覆盖中,检查appDelegate属性,如果它是true,那么你知道它来自后台,否则它刚出现正常。 BTW之后,将boolean属性设置为false以获得整洁。
编辑 - 除非您重新创建导航堆栈,否则必须在applicationDidBecomeActive中手动调用viewDidAppear。如果您能够获得指向当前可见视图控制器的指针,那么调用viewDidAppear应该是一个没有问题的方法,因为所有视图控制器都有此方法。你不需要任何代表或等等。