首页 > 解决方案 > 如何使标签栏项目仅可用于特定目标?

问题描述

我有一个tabBarController与三个items不同的viewControllerstargets我的项目中有四个,其中一个targets我想添加一个新tabBar itemnewViewController. 当item我运行另一个时,不应该出现targets

首先,我认为这就像将 设置为仅对我想要newViewController的特定对象可用一样简单,并且如果我在不同的. 但是应用程序崩溃了。targettabBartarget

有没有办法在不使用代码的情况下隐藏/显示tabBar item基于。我们试图在项目中摆脱这种情况。如果可能的话,这样做会很好。如果没有,那么有一个自定义类可用。如果您需要从中查看一些代码,请告诉我。target#if targetstoryBoardtabBar

标签: iosswiftuitabbarcontrollertargetuitabbaritem

解决方案


由于评论部分变得非常混乱,我想我会发布我UITabBarItem针对不同目标的不同集合的方法的要点。所以首先我创建了一个静态Environment变量,让我知道哪个目标正在被执行。这是代码:

enum Target {
    case targetOne, targetTwo

    static var current: Target {
        Bundle.main.bundleIdentifier?.contains("targetOneIdentifier") == true ? .targetOne : .targetTwo
    }
}

然后在里面UITabBarController,我viewControllers根据当前目标设置属性。这是 TabBarController 中的一些代码:

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let bool = Target.current == .targetOne
        let targetBasedViewController: UIViewController = bool ? FirstViewController() : SecondViewController()
        targetBasedViewController.tabBarItem.title = bool ? "First" : "Second"
        targetBasedViewController.tabBarItem.image = UIImage(named: bool ? "First" : "Second")
    }
}

注意:这只是我所做的定制的要点。整个事情真的很长,考虑到这种情况真的很难理解。


推荐阅读