我向视图控制器添加了一个单独的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.
答案 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
}
希望这会有所帮助。