检测何时从App Delegate通过UITabBarController按下tabBar项

时间:2013-12-12 06:46:02

标签: ios objective-c uitabbarcontroller uitabbar uitabbaritem

我知道这个问题已被问过几次了,但是当我在我的UITabBarController类中使用AppDelegate并且viewControllers只在那里设置时,我仍然坚持这个案例

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

现在我想要的是点击TabBar项目feedsNavController 而不是 viewWillAppear执行任务(因为它正在推动detailView来自{ {1}})。

我在同一个类中设置了委托来执行navigationController委托方法:

UITabBarController

但是   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.tabBarController.delegate = self; 仅在我切换TabBar项目时有效,但不是第一次

我有什么方法可以拨打-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController来代替:

UITabBarDelegate

为了在按下-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 时获得参考?

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

3 个答案:

答案 0 :(得分:11)

想出办法:

实际上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 :(得分:1)

如果您想执行任务1次,那么ViewDidLoad最适合它。每次ViewController聚焦时都会调用ViewWillAppear,但只要在堆栈上推送该控件时就调用ViewDidLoad。

答案 2 :(得分:0)

你是什么意思'因为它是通过navigationController推送一个detailView'?你的问题不太明确。

但也许这件事我可以通过我的理解来帮助你:

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

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

    }