Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 423
Samapple007 Avatar asked Dec 12 '13 06:12

Samapple007


2 Answers

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!

like image 126
Samapple007 Avatar answered Nov 15 '22 03:11

Samapple007


If you want to perform task 1 time then ViewDidLoad is best for it. ViewWillAppear calls every time your ViewController get focused but ViewDidLoad is called just when you push that Controller on stack.

like image 20
Kashif Ilyas Avatar answered Nov 15 '22 05:11

Kashif Ilyas