使用Swift实现一个简单的tabbar加分段控制器

这里我们先导入一个第三方文件PageTitleView
这个我们可以在网上下载

导入到工程之后,会有三个报错,这里我们手动修改就行了

使用Swift实现一个简单的tabbar加分段控制器

首先,我们根据这个可以看出来,这是由底部标签控制器和上边的分段控制器组合出来的效果

那么接下来就让我们进入代码
首先我们创建五个类,用来当做底部标签控制器
我这里就是用的简单的One,Two,这种的,这个大家可以随便定义

创建完成之后,我们进入Appdelegte
初始化五个控制器

let one = OneViewController()
        **let two = VCTwo()**
        //这里我们是将第二个ViewController换成了我们第三方文件里的那个,为了方便显示,所以就先这样了,大家可以自己更改
        let three = ThreeViewController()
        let four = FourViewController()
        let five = FiveViewController()

然后将五个定义的封装上导航栏(这里大家可以自己定义封装几个,需要什么加什么)

let oneNav = UINavigationController(rootViewController: one)
        let twoNav = UINavigationController(rootViewController: two)
        let threeNav = UINavigationController(rootViewController: three)
        let fourNav = UINavigationController(rootViewController: four)
        let fiveNav = UINavigationController(rootViewController: five)

添加标题

oneNav.tabBarItem.title = "我的"
        twoNav.tabBarItem.title = "我的"
        threeNav.tabBarItem.title = "我的"
        fourNav.tabBarItem.title = "我的"
        fiveNav.tabBarItem.title = "我的"

将以上的ViewController添加到UITabBarController中

let tabBar=UITabBarController()
        tabBar.viewControllers=[oneNav,twoNav,threeNav,fourNav,fiveNav]

将window的跟视图设置为tabBar

self.window?.rootViewController=tabBar
        self.window?.backgroundColor=UIColor.white
        
        twoNav.navigationBar.barTintColor = UIColor.orange

好了,到这里,App里面的代码结束,当然,大家如果有别的功能需要实现,可以自己后期添加

然后我们进入到那个第三方文件的VcTwo里面
这里给大家说一个链接,这里面有比较简单的头标题换成各种样式
这就是头标题格式的一个介绍以及代码

这里给大家把最上面的那两个的代码写一下
在那个第三方文件里里面

最上面的那两个

let items=["电话","短信"] as [AnyObject]
        let segmented=UISegmentedControl(items:items)
        segmented.center=self.view.center
        segmented.selectedSegmentIndex=0 //默认选中第1项
        segmented.addTarget(self, action:#selector(segmentDidchange),
                            for: UIControl.Event.valueChanged)  //添加值改变监听
        self.navigationItem.titleView = segmented

然后是左右两个按钮

self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage.init(named: "tabbar_discover"), style: UIBarButtonItem.Style.done, target: self, action: nil)
        
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage.init(named: "tabbar_contacts"), style: UIBarButtonItem.Style.done, target: self, action: nil)

接下来这个是写在ViewdidLoad外面,Controller里面

@objc func segmentDidchange(segmented:UISegmentedControl){
        //获得选项的索引
        print(segmented.selectedSegmentIndex)
        //获得选择的文字
        print(segmented.titleForSegment(at: segmented.selectedSegmentIndex) as Any)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

然后有这么一段代码,是可以控制在哪个分段控制器里面写东西

private lazy var pageContentView: MFPageContentView = {
        var childControllers = [UIViewController]()
        for k in 0..<5 {
        //首先把for后面变成一个自定义的值,我这里写的是k,然后区间的大小根据分段控制器的多少来决定
            var vc = UIViewController()
            let red: CGFloat = CGFloat(arc4random() % 256)
            let green: CGFloat = CGFloat(arc4random() % 256)
            let blue: CGFloat = CGFloat(arc4random() % 256)
            vc.view.backgroundColor = UIColor(red: red / 255.0, green: green / 255.0, blue: blue / 255.0, alpha: 1.0)
            //然后这里我们做一个判断
            我这个实在最后一个写的,所以写k ==4,大家可以自己更改,这里有一个主意事项,childControllers.append(vc)这个代码,一定得加载判断的后边
                        if k == 4{
                        //然后这里初始化的这个Controller,由我们自己来定义,定义完了,在里面实现一些功能,就是我们想要的在指定的分段控制器里面实现功能
            vc = VcTwoLXQ()
            }
            childControllers.append(vc)
        }
        
        let pageContentViewY = pageTitleView.frame.maxY
        let pageContentView = MFPageContentView(frame: CGRect(x: 0, y: pageContentViewY, width: SCREEN_WIDTH, height: SCREEN_HEIGHT-pageContentViewY), parentVC: self, childVCs: childControllers)
        pageContentView.pageContentViewDelegate = self
        return pageContentView
    }()

ok,到这里,基本就差不多了