Question

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.

Was it helpful?

Solution

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!

OTHER TIPS

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.

What do you mean by 'because it is pushing a detailView via navigationController' ? Your question is not so much clear.

But maybe this thing me help you by my understanding:

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController    
 {

        NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
        NSLog(@"Tab index = %u (%u)", indexOfTab);

    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top