隐藏标签栏项并使用其视图控制器

时间:2018-02-10 18:18:38

标签: ios swift xcode swift4

为了更好地解释我想要实现的目标,我在下面为您提供照片。在我的应用程序上,我有导航栏和标签栏。在标签栏上我想只有4个项目,但我还需要一些隐藏的项目。我想使用隐藏的项目来显示一些数据,并希望我的标签栏始终可用的常量4项,当然还有导航栏。在这个隐藏的项目上,我想根据我的菜单上点击的链接项目显示数据。

Blue navigation controller with connected view controller have to be hidden

修改

在下面的第二张照片中,您可以看到展开的菜单。当我点击例如" 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被推送到连接到第一个标签栏项目的控制器上。

问题:

    VC5上的
  • 后退按钮仅适用于第一次,然后无法通过" iPhone 5s"菜单项。似乎viewDidLoad函数只运行一次。
  • 第一个标签栏项目旨在是主页的快捷方式,如果有人点击标签栏项目,但当有人点击其中一个菜单项时也显示其他视图控制器,如VC5。通过这种方式,我将拥有我想要的所有功能,但不会隐藏其中一个标签栏项目,因为它似乎根本不可能。

enter image description here

enter image description here

2 个答案:

答案 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)
}