检测何时从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); }