如果在ViewController中使用UITabbar,如何设置Homeview控制器

时间:2018-10-26 12:06:17

标签: ios swift uitabbar

我向视图控制器添加了一个单独的UITabbar。取得了所有必要的渠道。主页viewcontroller中具有标签栏。我想要什么如果我单击第一个按钮应该没有任何变化,但是如果单击第二个标签栏项目,它将显示第二个屏幕。

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
        switch item.tag {

        case 1:
            if sampleOne == nil {

                var storyboard = UIStoryboard(name: "Main", bundle: nil)

                sampleOne = storyboard.instantiateViewController(withIdentifier: "s1") as! SampleOneViewController
            }
            self.view.insertSubview(sampleOne!.view!, belowSubview: self.sampleTabBar)

            break


        case 2:
            if sampleTwo == nil {

                var storyboard = UIStoryboard(name: "Main", bundle: nil)

                sampleTwo = storyboard.instantiateViewController(withIdentifier: "s2") as! SampleTwoViewController
            }
            self.view.insertSubview(sampleTwo!.view!, belowSubview: self.sampleTabBar)

            break

        default:

            break

        }

    But it loads Homeviewcontroller first then it shows the other viewcontroller. 
    Now how should i set the homeviewcontroller(which has uitabbar in it) as first viewcontroller. 

需要安布的帮助吗? enter image description here

1 个答案:

答案 0 :(得分:1)

根据文档,如果要在不同视图之间切换,同时保持ViewController不变,请使用UITabBar。但是,如果要在不同的视图控制器之间切换,则应该首选UITabBarController。

使用UITabBar切换视图控制器时可能会遇到的问题是,您需要手动处理很多事情。例如。添加和删​​除您的子视图控制器。

但是,如果您仍然坚持这样做,请在视图控制器之间使用父子关系。将您的HomeViewController设为父视图。现在在viewDidLoad上,假设默认情况下选择了第一项,则添加SampleOneViewController像这样:

        if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s1") as? SampleOneViewController {
        self.addChildViewController(vc)
        self.view.insertSubview(vc, belowSubview: tabBar)
    }

现在在标签栏委托中,您需要先删除以前的子视图控制器,然后再添加索引选择的子视图控制器。

所以您的委托方法将变成这样:

func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
    switch item.tag {

// Remove the previous child viewcontrollers
    for vc in self.childViewControllers {
        vc.willMove(toParentViewController: nil)
        vc.view.removeFromSuperview()
        vc.removeFromParentViewController()
    }


    case 1:

    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s1") as? SampleOneViewController {
        self.addChildViewController(vc)
        self.view.insertSubview(vc, belowSubview: self.view)
    }

        break


    case 2:
    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s2") as? SampleTwoViewController {
        self.addChildViewController(vc)
        self.view.insertSubview(vc, belowSubview: self.view)
    }

        break

    default:

        break

    }

希望这会有所帮助。