2016-04-05 2 views
0

В одном из моих ViewControllers У меня есть следующий код:Пытаясь понять TabBarDelegate

- (void)viewDidLoad 
{ 
    UITabBarController *tabBarController = (UITabBarController*)[UIApplication sharedApplication].keyWindow.rootViewController ; 
    [tabBarController setDelegate:self]; 
} 

и:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController: (UIViewController*)viewController { 
    NSLog(@"Yup!"); 
} 

Всякий раз, когда я включаю вкладки в моей установке с несколькими вкладками, консоль выплевывает

Йуп

как и ожидалось.

Однако, когда я добавить

UITabBarController *tabController = (UITabBarController*)self.window.rootViewController; 
tabController.selectedIndex = 1; 

на мой AppDelegate.m-х

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: 

'Да' не показывает больше.

Почему?

ответ

0

didSelectViewController будет вызывать при выборе вкладки/изменить из самого приложения, он не будет звонить, если вы установите SelectedIndex программно

tabController.selectedIndex = 1;, будет наиболее полезна, когда вы хотите установить закладку по умолчанию или хотите изменить SelectedIndex программно

От apple doc:
- (недействительными) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) ViewController

он вызывается только в ответ на отладки пользователя на панели вкладок и не вызывается , когда ваш код изменяет содержимое панели вкладок программно.

Вы можете попробовать вызвать этот метод вручную, как это:

- (void) selectedItemWithIndex:(int)value { 
    tabbar.selectedIndex = value; 
    [self tabBarController:tabbar didSelectViewController:tabbar.viewControllers.firstObject];//place you vc here by array or manually 
} 

Ref: https://stackoverflow.com/a/30700712/4557505

+0

Это имеет смысл, но я бы ожидать, что «Да», тем не менее удар, когда я изменить вкладки – Sjakelien

+0

@Sjakelien обновил ответ – HardikDG

+0

Я до сих пор не вижу причины, по которой метод в AppDelegate отменит другие функции. И я слишком стар, чтобы сделать Свифт. – Sjakelien