双击UITabBarController时防止自动popToRootViewController

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双击UITabBarController时防止自动popToRootViewController相关的知识,希望对你有一定的参考价值。

UITabBarController的默认行为是在第二次点击特定选项卡时将包含的UINavigationController弹出到根视图控制器。我有一个特殊的用例,我希望它不能自动工作,而我很难弄清楚如何防止这种情况。

有没有人碰到这个,如果有的话,你做了什么?我是否需要子类化UINavigationController并覆盖popToRootViewController或者是否有更简单的方法?

答案

使用tabBarController:shouldSelectViewController:UITabBarControllerDelegate protocol方法。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    return viewController != tabBarController.selectedViewController;
}

不要忘记将标签栏控制器的委托设置为实际实现此委托方法的对象。

另一答案

这就是我做的:

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

    if ([[tabBarController viewControllers] objectAtIndex:[tabBarController selectedIndex]] == viewController)

            return NO;

    return YES;

}

问候

另一答案

更新Swift 4.1

停止双击所有选项卡。

extension TabBarController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    //for blocking double tap on all tabs.
    return viewController != tabBarController.selectedViewController
}}

停止双击仅在一个特定选项卡上。这是第三个标签。

extension TabBarController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    //for blocking double tap on 3rd tab only
    let indexOfNewVC = tabBarController.viewControllers?.index(of: viewController)
    return ((indexOfNewVC != 2) ||
        (indexOfNewVC != tabBarController.selectedIndex))       
}}

希望能帮助到你...

谢谢!!!

另一答案

这种行为有点奇怪,但在深层次结构的情况下是一个方便的快捷方式!

您可以实现以下UITabBarControllerDelegate方法来禁用此系统范围的快捷方式:

#pragma mark -
#pragma mark UITabBarControllerDelegate

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
    UIViewController *tbSelectedController = tbc.selectedViewController;

    if ([tbSelectedController isEqual:vc]) {
        return NO;
    }

    return YES;
}
另一答案

这是Swift 3版本:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    return viewController != tabBarController.selectedViewController
}

以上是关于双击UITabBarController时防止自动popToRootViewController的主要内容,如果未能解决你的问题,请参考以下文章

防止自定义 UITabBarController 更改选项卡

如何防止 UITabBarController 更新子视图?

如何防止通过推送 SFSafariViewController 解雇 UITabBarController?

UITabBarController 和模式视图的自动旋转问题

在Android中快速双击时如何防止关闭应用程序?

如何防止按钮双击