detect when a tabBar item is pressed via UITabBarController from App Delegate

Samapple007 picture Samapple007 · Dec 12, 2013 · Viewed 9k times · Source

I know this question has been asked a few times, but I am still stuck on the case when I have my UITabBarController in my AppDelegate class and viewControllers are set there only as

self.tabBarController.viewControllers = 
     @[aboutUsNavController,myProfileNavController,
      projectsListNavController, feedsNavController,homeViewController];

Now what I want is to perform a task at the tap of TabBar item feedsNavController not in viewWillAppear (because it is pushing a detailView via navigationController ).

I have set delegate in the same class to perform a UITabBarController delegate method:

 AppDelegate *appDelegate = 
         (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.tabBarController.delegate = self;

But -(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController only works when I switch the TabBar Item, but not at the first time?

Is there any way I can call UITabBarDelegate instead:

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

in order to get the reference when tabBar item is pressed?

Or any other approach would be appreciated.

Answer

Samapple007 picture Samapple007 · Dec 12, 2013

Figured out the way to do it:

Actually UITabBarControllerDelegate method only gets called once that particular tab it loaded.

Therefore, I performed task [self getFeedsFromServer]; in viewDidLoad (for first time), and then again in

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Selected INDEX OF TAB-BAR ==> %i", tabBarController.selectedIndex);

    if (tabBarController.selectedIndex == 3) {
      [self getFeedsFromServer];
    }
}

Works as I wanted!