【问题标题】:How can I disable some of the tabs of the moreNavigationController of my UITabBarController?如何禁用我的 UITabBarController 的 moreNavigationController 的某些选项卡?
【发布时间】:2021-12-12 07:33:56
【问题描述】:

我正在使用 XCode 13.0、Swift 5.5 和 Storyboard。这是一款适用于 iOS 15 的 iPhone 移动应用。

我总共有 7 个标签,所有标签都有图标。我的应用程序的标签栏中有 4 个标签和一个“更多”标签。 用户单击“更多”选项卡后会显示 3 个附加选项卡。我希望禁用这些附加选项卡中的前 2 个。它们需要是灰色的,当用户点击这两个中的任何一个时,我想应用什么都不做(不显示任何页面,不导航到任何地方)。我使用的是 Apple 定义的原始 UITabBarController 和 moreNavigationController,我没有对它们中的任何一个进行子类化。 在我的故事板上,我向这 2 个禁用的选项卡添加了 2 个 UIViewController,但我以这种方式将它们设置为禁用:

这根本不起作用。当用户单击 2 个禁用的选项卡时,它们会显示 2 个空的 ViewController。我希望他们不会显示任何内容。

我还尝试从我的 UITabBarController 第一次打开的页面访问 moreNavigationController 的选项卡。我尝试以编程方式禁用这两个选项卡。但是我没有设法访问这两个选项卡,我只能访问显示在选项卡栏中的主选项卡(我不需要访问这些)。如何禁用单击更多选项卡后显示的选项卡并将其涂成灰色?

let moreControllerItems = tabBarController?.moreNavigationController.toolbarItems
    
if let tabArray = moreControllerItems {
   let tabBarItem1 = tabArray[0]
   let tabBarItem2 = tabArray[1]

   tabBarItem1.isEnabled = false
   tabBarItem2.isEnabled = false
}`

此代码不起作用,moreControllerItems 变量为零。 tabBarController 变量不是 nil,我可以从这里访问我的 UITabBarController,但它对我没有多大帮助。 我用谷歌搜索了这个问题很多不同的方法,但我找不到解决方案。任何帮助,将不胜感激。我真的需要解决这个问题,如果您知道如何解决这个问题,请写评论。谢谢!

【问题讨论】:

    标签: ios swift uitabbarcontroller


    【解决方案1】:

    您可以从 TabBarController 禁用 tabBar 项目。

    class TabVC: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    func disableTabBar(itemNo: Int) {
        if let items = tabBar.items, itemNo < items.count {
            items[itemNo].isEnabled = false
        }
    }
    

    您可以通过以下方式访问此功能 任何附加到 TabBarController 的子 Viewcontroller

    class MoreVC: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if let tabBarVC = tabBarController as? TabVC {
            tabBarVC.disableTabBar(itemNo: 1)
        }
    }
    

    【讨论】:

    • 感谢@Antony 的回答。不幸的是它不起作用:(我试过了,只有当我试图禁用前 4 个标签栏项目之一时它才会起作用。我总共有 7 个标签栏项目。我正在尝试禁用第 5 和第 6 个标签栏项目. 最后3个tabbar项是moreNavigationController的一部分。这是当应用程序中有超过4个选项卡时UITabBarController的工作方式。moreNavigationController是苹果自己的类,我没有定义它。我使用的是苹果原来的UITabBarController,我没有继承它。你知道我可以如何禁用 moreNavigationController 的某些选项卡吗?
    【解决方案2】:

    简而言之:您无法禁用它。如果要禁用More Viewcontroller中的item,则必须在第五个Tab中使用自定义Viewcontroller

    我在这里解释为什么我们不能这样做以及我们有什么限制。

    如果 UITabBarController 中的项目超过五个,Apple 将显示更多选项卡。更多选项卡包含附加到一种 UIMoreListController 的 UINavigationController。你可以检查

    print moreNavigationController.viewControllers[0]
    

    UIMoreListController 不可访问。在您的情况下,其余三个项目列在 UIMoreListController 中。虽然我们仍然可以访问 Viewcontroller 的 tabBarItem 并且我们可以禁用它。您可以通过单击编辑选项进行检查。

    但是,只要它在 UIMoreListController 中,用户仍然可以点击它。因为我们没有与 tabBar 交互,而是与列表中的项目交互。使用 MoreViewcontroller 中的编辑选项将项目移动到前四个位置中的任何一个后,用户将无法单击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2018-02-11
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      相关资源
      最近更新 更多