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.
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!
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);
}
来源:https://stackoverflow.com/questions/20536756/detect-when-a-tabbar-item-is-pressed-via-uitabbarcontroller-from-app-delegate