在iOS7 UITabbarController中,如何在点击已选择的tabBarItem时停止将navigationController重置为root?

时间:2013-11-01 17:38:55

标签: ios iphone objective-c ipad

我有一个UITabBarController作为iPad应用程序故事板中的rootViewController。

它包含3个tabBarItems。

每个项目都包含一个navigationController.So总共3个navigationControllers。

情景:

  1. 我选择第二个tabBarItem。然后第二个navigationController将在tabBarController上显示,并显示其相关的rootController视图。

  2. 我在这个可见的navigationController上推了一些控制器。

  3. 现在,当我点击第二个tabBarItem(现在已经选中)时,tabBarController会弹出所有推送的控制器并将navigationController带到它的rootController视图。

  4. 问题: 我怎么能阻止这种行为?当用户再次点击它时,选定的tabBarItem不应执行任何操作。

2 个答案:

答案 0 :(得分:4)

如果在rootViewController中初始化UITabBarController,请在rootViewController中添加UITabBarControllerDelegate,并实现此委托:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    UIViewController* selected = [tabBarController selectedViewController];

    if (viewController == selected)
        return NO;
    else
        return YES;
}

答案 1 :(得分:0)

为您的UITabBarController设置委托以达到您想要的任何行为。 ( UITabBarControllerDelegate

然后实现委托方法

- (id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController
            animationControllerForTransitionFromViewController:(UIViewController *)fromVC
                                              toViewController:(UIViewController *)toVC{
    return self;
}
-(NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{

    return 0.25f;
}

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{

    self.transitionContext = transitionContext;

  //Custom transition method.


    [self executePresentationAnimation:transitionContext];
}

参考:https://developer.apple.com/library/ios/documentation/uikit/reference/UITabBarControllerDelegate_Protocol/Reference/Reference.html