想实现的效果如下
-
思路
- 创建控制器A、B、C,将B 和 C 添加为 A 的childViewController
- 将B 和 C的view 添加到 A的View上
- 将A的navigationItem的titleView 设置为SegmentControl
- 根据SegmentControl 的 selectedSegmentIndex来决定让B 和 C哪个控制器的view显示
关键代码如下
//==========实例化 B C两个控制器
let serverViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ServerViewController") as! ServerViewController
let requireViewController = RequireListViewController_1_2()
//===========将 B C 两个控制器 添加为当前控制器的子控制器
addChildViewController(serverViewController)
addChildViewController(requireViewController)
//===========将 B C 两个控制器的view 添加到当前控制器的view上
view.addSubview(serverViewController.view)
view.addSubview(requireViewController.view)
requireViewController.view.hidden = false
serverViewController.view.hidden = true
//==========实例化segmentControl
let segmentControl = UISegmentedControl(items: ["需求","服务"])
segmentControl.frame = CGRectMake(0, 0, 134, 30)
//==========给segmentControl 添加监听方法
segmentControl.addTarget(self, action: #selector(HomeSquareViewController.segmentControlValueChanged(_:)), forControlEvents: .ValueChanged)
//==========当前控制器的titleView 设置segmentControl
navigationItem.titleView = segmentControl
//==========segmentControl 监听的方法
@objc private func segmentControlValueChanged(sender:UISegmentedControl){
requireViewController.view.hidden = sender. selectedSegmentIndex != 0
serverViewController.view.hidden = sender. selectedSegmentIndex == 0
}