如何使标签栏项目仅对特定目标可用?

How do I make a tabbar item available only for a specific target?

我有一个 tabBarController 和三个 items 到不同的 viewControllers。我的项目中有四个 targets,对于其中一个 targets,我想添加一个新的 tabBar itemnewViewController。当我 运行 另一个 targetsitem 不应该出现。

首先我认为这很简单,只需将 newViewController 设置为仅对我想要的特定 target 可用,并且它不会出现在 tabBar 中如果我 运行 下的项目不同 target。但是应用程序崩溃了。

有没有一种方法可以在 target 的基础上 hide/show tabBar item 而无需使用 #if target 代码。我们试图在项目中摆脱它。如果可能的话,最好在 storyBoard 中进行。如果没有,则可以使用自定义 tabBar class。如果您需要查看其中的一些代码,请告诉我。

由于评论部分变得非常混乱,我想我会 post 了解我针对不同目标的不同 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")
    }
}

注意:这只是我做的定制的要点。整篇文章真的很长,考虑到场景,真的很难理解。