iOS禁用按标签栏按钮弹出到根视图

Posted

技术标签:

【中文标题】iOS禁用按标签栏按钮弹出到根视图【英文标题】:iOS Disable popping to root view on pressing tab bar button 【发布时间】:2015-02-28 15:55:58 【问题描述】:

我希望禁用按下标签栏并返回导航层次结构中的根视图的功能,同时在我的导航栏中为按钮保留此功能。

所以我希望用户返回根视图的唯一方法是按下导航栏中的按钮,而不是点击标签栏按钮。

我环顾四周并尝试了几种解决方案,但似乎都没有奏效,因为它们禁用了导航栏按钮和标签栏按钮的功能,而不仅仅是标签栏按钮。

谢谢!

【问题讨论】:

我不知道你在说什么功能。当您在选项卡栏控制器中切换选项卡时,它应该对作为选项卡中的根控制器的任何导航控制器的导航堆栈没有影响。我当然没有在我的应用程序中看到这种行为。说明您的控制器设置是什么。 据我所知,他并不是指在标签之间切换。当您在 UITabBarController 中(再次)选择当前选择的选项卡时,它会自动弹回其 navigationController 堆栈的 rootviewController。这是默认行为。他想避免这种情况。如果我错了,请纠正我。 @croX,是的,我误解了这个问题。你描述的是当你点击你已经打开的标签时的默认行为。 @rdelmar,没错。 我找到了这个解决方案,效果很好:***.com/questions/4856159/… 【参考方案1】:

一种可能性是创建UITabBarController 的子类并实现UITabBarControllerDelegate 协议。 然后你可以实现

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

并在再次选择特定的 viewController 时返回 NO。 一种方法是保存最近选择的项目并将其与当前选择的项目进行比较。

【讨论】:

感谢您对我的回答发表评论,我太累了,现在无法回答问题。【参考方案2】:

周末遇到这个问题。在 appDelegate didfinishlaunching() 方法期间,我一直发现我的自定义 TabBarController 为零。

我解决它的方法是让我的自定义 TabBarController 成为 UITabBarControllerDelegate,然后在自定义 TabBarController 类中实现以下委托方法:

    // Stops View Controllers from being dismissed when a tab is selected on the UITabBarController
    public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 
    return viewController != tabBarController.selectedViewController
    

【讨论】:

以上是关于iOS禁用按标签栏按钮弹出到根视图的主要内容,如果未能解决你的问题,请参考以下文章

弹出到根视图控制器时导航栏消失

弹出到根视图控制器,没有表视图的动画崩溃

如何停止加载标签栏项目选择的视图?

SwiftUI:再次轻按选定的选项卡时,弹出到根视图

弹出导航控制器并选择选项卡?

选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)