当我触及tabbar项目时,我没有收到任何通知

时间:2012-02-15 12:06:47

标签: ios uitabbarcontroller key-value-observing

我有UITabbarCoo = ntroller应用程序。我添加了一个观察者,我正在等待任何通知。当我触及tabbar项目时,我没有收到任何通知。

[self.tabBarController addObserver:self forKeyPath:@"selectedIndex" options:NSKeyValueObservingOptionNew context:@"changedTabbarIndex"];

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
 NSString *action = (NSString*)context; 
 if([action isEqualToString:@"changedTabbarIndex"])
     {
     }
 }

1 个答案:

答案 0 :(得分:3)

我注意到了同样的事情。我假设这是UITabBarController实现中的一个错误。请注意,使用selectedViewController而不是selectedIndex的密钥路径会导致触发KVO通知。

但要小心。如果您的UITabBarController有一个 UIMoreNavigationController (对于“更多”标签),当用户选择“更多”标签时,您将收到KVO通知,但将不会当用户选择UIMoreNavigationController的子视图控制器时,获取任何通知。这是因为UIMoreNavigationController是一个单独的视图控制器,所以当你选择一个子视图控制器时,UITabBarController的selectedViewController没有改变 - 它实际上是UIMoreNavigationController的topViewController发生变化。

如果您可以在UITabBarController的topViewController属性之外观察UIMoreNavigationController的selectedViewController属性,那将是很棒的,但是此属性似乎也不会导致KVO通知被触发。但是,可以在UIMoreNavigationController上设置委托并实现navigationController:didShowViewController:animated:方法。

摘要:观察UITabBarController的selectedViewController属性,如果您的应用程序有“更多”标签,请在标签栏控制器的moreNavigationController属性上设置委托。