检测何时从App Delegate通过UITabBarController按TabBar项目

我知道这个问题已经被问了几次,但我仍然坚持的情况下,当我有我的AppDelegate类中的我的UITabBarController和viewControllers设置那里只有作为

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

现在我想要的是在TabBar项目feedsNavController执行任务,而不是在 viewWillAppear (因为它正在通过navigationController推送一个detailView )。

我已经在同一个类中设置委托来执行UITabBarController委托方法:

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

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController只适用于当我切换TabBar项目, 但不是在第一次

有什么办法可以调用UITabBarDelegate

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

为了得到tabBar item被按下时的参考?

或者任何其他的方法,将不胜感激。

想通了这样做的方式:

其实UITabBarControllerDelegate方法只被调用一次它加载的特定标签。

所以我执行了任务[self getFeedsFromServer];viewDidLoad (第一次),然后再次

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

按我想要的方式工作!

如果你想执行任务1,那么ViewDidLoad最适合它。 ViewWillAppear每次调用ViewController时都会调用ViewDidLoad,而当您将该Controller放在堆栈上时,ViewDidLoad会被调用。

你是什​​么意思,因为它通过navigationController推动一个detailView? 你的问题不是很清楚。

但是,也许这件事我帮助你,我的理解:

 - (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController { NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController]; NSLog(@"Tab index = %u (%u)", indexOfTab); }