在 iOS7 UITabbarController 中,如何在点击已选择的 tabBarItem 时停止将 navigationController 重置为 root?
Posted
技术标签:
【中文标题】在 iOS7 UITabbarController 中,如何在点击已选择的 tabBarItem 时停止将 navigationController 重置为 root?【英文标题】:In iOS7 UITabbarController, how to stop resetting the navigationController to root on tapping the already selected tabBarItem? 【发布时间】:2013-11-01 17:38:55 【问题描述】:我有一个 UITabBarController 作为 iPad 应用故事板中的 rootViewController。
它包含 3 个 tabBarItems。
每个item都有一个navigationController。所以总共有3个navigationController。
场景:
我选择了第二个 tabBarItem。然后第二个 navigationController 将在 tabBarController 上可见,并显示其关联的 rootController。
我在这个可见的 navigationController 上推送了一些控制器。
现在,当我点击第二个 tabBarItem(现在已经被选中)时,tabBarController 会弹出所有推送的控制器并将 navigationController 带到它的 rootController 视图。
问题: 我怎样才能阻止这种行为?当用户再次点击它时,选定的 tabBarItem 不应执行任何操作。
【问题讨论】:
【参考方案1】:如果您在 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;
【讨论】:
【参考方案2】:为您的 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
【讨论】:
以上是关于在 iOS7 UITabbarController 中,如何在点击已选择的 tabBarItem 时停止将 navigationController 重置为 root?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7 - 呈现模式视图控制器选择 UITabBarController 中的第一个选项卡
iOS 7 - UITabBarController selectedIndex 崩溃
继承 UITabBarController 和 UINavigationController
在 iOS 7 Storyboard 中用 UITabBarController 替换 UIViewController
UINavigationController 中的 UITabBarController 适用于 iOS 8 但不适用于 7