这里我们先导入一个第三方文件PageTitleView
这个我们可以在网上下载
导入到工程之后,会有三个报错,这里我们手动修改就行了
首先,我们根据这个可以看出来,这是由底部标签控制器和上边的分段控制器组合出来的效果
那么接下来就让我们进入代码
首先我们创建五个类,用来当做底部标签控制器
我这里就是用的简单的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,到这里,基本就差不多了