问题
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.
回答1:
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!
回答2:
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.
回答3:
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