how can I manage controllers in Container View with using tab bar(如何使用标签栏管理容器视图中的控制器)
问题描述
在我的故事板上,我有主 ViewController,而不是 TabBarViewController,它由底部的 TabBar、顶部的视图和顶部的 ContainerView 组成中间.ContainerView 有一个 NavigationController.我也有 4 个 ViewControllers,其中之一 - NavigationController 的 RootViewController.我希望在选择 TabBarItem 时显示 ViewControllers 之一,以后我将添加幻灯片菜单,该菜单也将显示选定的 ViewController.
我有下一个代码,它只显示 ContainerView 中的初始 ViewController,当我选择 TabBarItems 时,新的 ViewControllers 没有显示,我只看到第一个 View Controller.出了什么问题?
On my storyboard I have main ViewController, not TabBarViewController, which consist of TabBar on the bottom, view on the top and ContainerView on the middle. ContainerView have a NavigationController. I also have 4 ViewControllers, one of them - RootViewController of NavigationController. I wish to show one of ViewControllers when I selecting TabBarItem, and in future I will add slide menu, which also will show selected ViewController.
I have next code, which only shows initial ViewController inside ContainerView, and when I selecting TabBarItems, new ViewControllers don't showing and I see only first View Controller. What goes wrong?   
class ViewController: UIViewController {
    @IBOutlet weak var container: UIView!
    @IBOutlet weak var first: UITabBarItem!
    @IBOutlet weak var second: UITabBarItem!
    @IBOutlet weak var third: UITabBarItem!
    @IBOutlet weak var fours: UITabBarItem!
    @IBOutlet weak var tabBar: UITabBar!
    var firstVC: FirstViewController?
    var secondVC: SecondViewController?
    var thirdVC: ThirdViewController?
    var foursVC: FoursViewController?
    var navi: UINavigationController?
    override func viewDidLoad() {
        super.viewDidLoad()
        tabBar.delegate = self
        initialSetup()
    }
    func initialSetup() {
        tabBar.selectedItem = tabBar.items?.first
        navi = self.storyboard?.instantiateViewController(withIdentifier: "containerNavi") as? UINavigationController
        firstVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as? FirstViewController
        secondVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController
        thirdVC = self.storyboard?.instantiateViewController(withIdentifier: "ThirdViewController") as? ThirdViewController
        foursVC = self.storyboard?.instantiateViewController(withIdentifier: "FoursViewController") as? FoursViewController
    }
    func showVC(number: Int) {
        switch number {
        case 0:
            navi?.popToRootViewController(animated: true)
            print("0")
        case 1:
            if let second = secondVC {
                navi?.pushViewController(second, animated: true)
            }
            print("1")
        case 2:
            if let third = thirdVC {
                navi?.pushViewController(third, animated: true)
            }
            print("2")
        case 3:
            if let fours = foursVC {
                navi?.pushViewController(fours, animated: true)
            }
            print("3")
        default:
            return
        }
    }
}
extension ViewController: UITabBarDelegate {
    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        showVC(number: item.tag)
    }
}
故事板截图:
推荐答案
你可以尝试使用这个扩展来添加/删除任何4到containerView
You can try to use this extesion to add/remove any of the 4 to containerView
extension UIViewController {
    func add(_ child: UIViewController, frame: CGRect? = nil) {
        addChildViewController(child)
        if let frame = frame {
            child.view.frame = frame
        }
        view.addSubview(child.view)
        child.didMove(toParentViewController: self)
    }
    func remove() {
        willMove(toParentViewController: nil)
        view.removeFromSuperview()
        removeFromParentViewController()
   }
}
//像这样使用它
let vc = self.storyboard?.instantiateViewController(withIdentifier: "first")
self.add(vc, frame: self.containerView.frame)
删除
vc.remove()
                        这篇关于如何使用标签栏管理容器视图中的控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用标签栏管理容器视图中的控制器
				
        
 
            
        - 使用自动布局向 UIScrollView 添加动态大小的视图 2022-01-01
 - 如何在 iPhone 模拟器中重置 NSUserDefaults 数据? 2022-01-01
 - Xcode 7.3 中带有 UILabel 的 UIStackView 2022-01-01
 - 在 Iphone SDK 的导航栏上添加多个按钮 2022-01-01
 - URL编码Swift iOS 2022-01-01
 - UITextView 内容插图 2022-01-01
 - 网上有没有好的 UIScrollView 教程? 2022-01-01
 - SetOnItemSelectedListener上的微调程序错误 2022-01-01
 - 类似于 Mail.app 的 iPad 模态视图控制器? 2022-01-01
 - GPS状态的广播接收器? 2022-01-01
 
