Я не получил никаких уведомлений, когда я касался элементов панели вкладок - PullRequest
1 голос
/ 15 февраля 2012

У меня есть приложение UITabbarCoo = ntroller. Я добавил наблюдателя и жду каких-либо уведомлений. Когда я касался элементов панели вкладок, я не получал никаких уведомлений.

[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 Ответ

3 голосов
/ 07 марта 2012

Я заметил то же самое.Я предполагаю, что это ошибка в реализации UITabBarController.Обратите внимание, что использование ключевого пути selectedViewController вместо selectedIndex приводит к срабатыванию уведомлений KVO.

Но будьте осторожны.Если ваш UITabBarController имеет UIMoreNavigationController (для вкладки «Дополнительно»), вы получите уведомление KVO, когда пользователь выберет вкладку «Еще», но вы не получите , получая какие-либоуведомления, когда пользователь выбирает дочерний view-контроллер UIMoreNavigationController.Это связано с тем, что UIMoreNavigationController является отдельным контроллером представления, поэтому, когда вы выбираете один из его дочерних контроллеров представления, значение selectedViewController для UITabBarController не изменяется, а изменяется topViewController на самом деле UIMoreNavigationController.

Это будетбыло бы замечательно, если бы вы могли наблюдать свойство topViewController UIMoreNavigationController в дополнение к свойству selectedViewController UITabBarController, но это свойство также не вызывает срабатывания уведомлений KVO.Однако вы можете установить делегата на UIMoreNavigationController и реализовать метод navigationController:didShowViewController:animated:.

Сводка: наблюдать за свойством selectedViewController UITabBarController и, еслиВ вашем приложении есть вкладка «Дополнительно», установите делегата в свойстве moreNavigationController контроллера панели вкладок.

...