用UISegmentControl实现两个控制器界面的切换

想实现的效果如下

segmentControl切换动态图.gif
  • 思路

    • 创建控制器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
    }

你可能感兴趣的:(用UISegmentControl实现两个控制器界面的切换)