如何使标签栏项目仅对特定目标可用?
How do I make a tabbar item available only for a specific target?
我有一个 tabBarController
和三个 items
到不同的 viewControllers
。我的项目中有四个 targets
,对于其中一个 targets
,我想添加一个新的 tabBar
item
到 newViewController
。当我 运行 另一个 targets
时 item
不应该出现。
首先我认为这很简单,只需将 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")
}
}
注意:这只是我做的定制的要点。整篇文章真的很长,考虑到场景,真的很难理解。
我有一个 tabBarController
和三个 items
到不同的 viewControllers
。我的项目中有四个 targets
,对于其中一个 targets
,我想添加一个新的 tabBar
item
到 newViewController
。当我 运行 另一个 targets
时 item
不应该出现。
首先我认为这很简单,只需将 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")
}
}
注意:这只是我做的定制的要点。整篇文章真的很长,考虑到场景,真的很难理解。