为了更好地解释我想要实现的目标,我在下面为您提供照片。在我的应用程序上,我有导航栏和标签栏。在标签栏上我想只有4个项目,但我还需要一些隐藏的项目。我想使用隐藏的项目来显示一些数据,并希望我的标签栏始终可用的常量4项,当然还有导航栏。在这个隐藏的项目上,我想根据我的菜单上点击的链接项目显示数据。
修改
在下面的第二张照片中,您可以看到展开的菜单。当我点击例如" iPhone 5s"菜单项,我想打开视图控制器(从下面第一张照片上的VC5,绿色vc)。我设法用代码打开这个标签:
ContainerVC.tabBarViewController?.selectedIndex = 0
在Gereons建议之后我将这些代码行放入VC5(在viewDidLoad函数上):
let vc5 = self.storyboard?.instantiateViewController(withIdentifier: "VC5")!
self.navigationController?.pushViewController(vc5, animated: true)
这些代码行实际上以我想要的方式显示VC5控制器。 VC5被推送到连接到第一个标签栏项目的控制器上。
问题:
答案 0 :(得分:0)
您可以更改viewControllers
的{{1}}属性,以隐藏或显示视图控制器。
假设我在IB的tabBarController中连接了3个VC;隐藏第三个这样做:
UITabBarController
还将storyboardID放到隐藏的VC中并加载任意软件
编辑:您可以在IB上没有连接的情况下使用awakeFromNib,或者您可以在awakeFromNib中处理viewControllers数组,并使用IB中设置的所有连接删除所需索引处的数据。
通过将vcs数组(除了要隐藏的所有已连接的数据)分配到tabBarController的viewControllers属性,从tabBar隐藏视图控制器,通过在IB中设置storyboardID来访问viewController
class customTabBar : UITabBarController
{
override func awakeFromNib()
{
let vc1 = self.storyboard?.instantiateViewController(withIdentifier: "vc1ID")
let vc2 = self.storyboard?.instantiateViewController(withIdentifier: "vc2ID")
let vc3 = self.storyboard?.instantiateViewController(withIdentifier: "vc3ID") // I will hide this
self.viewControllers = [VC1,VC2]
}
根据需要显示或推送loadHiddenVC
答案 1 :(得分:0)
我不会搞乱tabbar,而是根据需要创建第5个视图控制器(可能来自不同的storyboard文件)并将其推送到导航堆栈:
func displayFifthViewController() {
let vc5 = self.storyboard?.instantiateViewController(withIdentifier: "VC5")!
self.navigationController?.pushViewController(vc5, animated: true)
}