首页 > 其他分享 >swift - 之TabBarController的用法

swift - 之TabBarController的用法

时间:2023-08-25 14:01:10浏览次数:35  
标签:named image tabBarItem let TabBarController UIImage 用法 swift 图标

TabBarController的使用,下面记录两种写法,代码如下:

TabBarItem系统自带图标样式(System)介绍:

Custom:自定义方式,配合Selected Image来自定义图标

More:三个点的图标,表示更多意思

Favorites:星形图标

Featured:星形图标

Top Tated:星形图标

Recents:时钟图标

Contacts:一个圆形一个人头像的图标,代表联系方式

History:时钟图标

Bookmarks:书本图标

Search:放大镜图标,代表搜索的意思

Downloads:正方形,加一个向下的箭头,代表下载的意思

Most Recent:时钟图标

Most Viewed:三条杠的笔记本纸片图标

 

第一种,传统的写法,如下:

1,创建一个继承与UITabViewController的类

class MainVC: UITabBarController

2,具体实现方法如下:

//包含的视图
        let mainVC = ViewController()
        mainVC.title = "首页"
        let groupVC = FirstViewController()
        groupVC.title = "群组"
        let tenthVC = TenthViewController()
        tenthVC.title = "我的"
        
        //声明视图控制器
        let main = UINavigationController(rootViewController:mainVC)
        main.tabBarItem.image = UIImage(named:"Person")
        main.tabBarItem.selectedImage = UIImage(named:"Person_se")
        //定义tab按钮添加个badge小红点值
        main.tabBarItem.badgeValue = "!"
        
        //声明视图控制器
        let group = UINavigationController(rootViewController:groupVC)
        group.tabBarItem.image = UIImage(named:"Person")
        main.tabBarItem.selectedImage = UIImage(named:"Person_se")
        //定义tab按钮添加个badge小红点值
        group.tabBarItem.badgeValue = "!"
        
        //声明视图控制器
        let mine = UINavigationController(rootViewController:tenthVC)
        mine.tabBarItem.image = UIImage(named:"Person")
        main.tabBarItem.selectedImage = UIImage(named:"Person_se")
        //定义tab按钮添加个badge小红点值
        mine.tabBarItem.badgeValue = "!"
        
        self.selectedIndex = 0
        //self.tabBarItem.selectedImage = UIImage(named:"Person_se")
        self.viewControllers = [main,group,mine]

效果如下:

swift - 之TabBarController的用法_导航栏

 

 第二种方法,for循环,比较简便,不过需要注意一个点,代码如下:

1,声明

let nameAry = ["首页","分类","我的"]
let picAry = ["contact","Event","Person"]
let picSelectedAry = ["contact_se","Event_se","Person_se"]
let VCAry = [ViewController(),FirstViewController(),TenthViewController()]
//初始化数组
var navVCAry:[NSObject] = [NSObject]()

var nav:UINavigationController = UINavigationController()

2,具体代码使用for循环实现:

func creatTabbar(){
        
        for M in 0..<VCAry.count {
            nav = UINavigationController(rootViewController:(VCAry[M]))
            nav.tabBarItem.title = nameAry[M]
            //设置tabbaritem的字体颜色和字体大小(选中与未选中效果)
            nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.black,NSFontAttributeName:UIFont.systemFont(ofSize: 15)], for: .normal)
            nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.cyan,NSFontAttributeName:UIFont.systemFont(ofSize: 10)], for: .selected)
            nav.tabBarItem.image = UIImage(named:picAry[M])
            nav.tabBarItem.selectedImage = UIImage(named:picSelectedAry[M])
            VCAry[M].title = nameAry[M]
            navVCAry.append(nav)
          
        }

千万别忘了!!如下:

//添加工具栏---》千万别忘了
        self.viewControllers = navVCAry as? [UIViewController]

在此方法实现后,运行后发现一个问题,就是图片并未正常展示,而是现实的默认的蓝色,这个时候需要设置图片的展示属性,具体如下:

UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:

 .automatic  // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。     
 .alwaysOriginal   // 始终绘制图片原始状态,不使用Tint Color。  
 .alwaysTemplate   // 始终根据Tint Color绘制图片,忽略图片的颜色信息。

了解这3个属性,然后在上面的方法中添加如下代码:

var image:UIImage = UIImage(named:picAry[M])!
    var selectedimage:UIImage = UIImage(named:picSelectedAry[M])!
    image = image.withRenderingMode(UIImageRenderingMode.alwaysOriginal);
    selectedimage = selectedimage.withRenderingMode(UIImageRenderingMode.alwaysOriginal);
    nav.tabBarItem.image = image
    nav.tabBarItem.selectedImage = selectedimage

具体的效果就不上效果图了,感兴趣的可以自己去测试下,括弧:使用storyboard拖拽的tabbarcontroller也可以使用此方式来让tabbaritem的image正常显示。

3,顺便也可以设置导航栏的背景颜色和title的颜色,因为创建的时候就已经把导航控制器加进去了,代码如下:

//设置导航栏的背景图片 (优先级高)
    (navVCAry[M] as AnyObject).navigationBar.setBackgroundImage(UIImage(named:"NavigationBar"), for:.default)
    //设置导航栏的背景颜色 (优先级低)
    (navVCAry[M] as AnyObject).navigationBar.barTintColor = UIColor.orange
    //设置导航栏的字体颜色
    (navVCAry[M] as AnyObject).navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.red]

4,设置tabbaritem的字体颜色和字体大小(选中与未选中效果)

nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.black,NSFontAttributeName:UIFont.systemFont(ofSize: 15)], for: .normal)
nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.cyan,NSFontAttributeName:UIFont.systemFont(ofSize: 10)], for: .selected)

效果如下:

swift - 之TabBarController的用法_背景颜色_02

这样一来,当行栏的背景颜色和title的字体颜色,还有tabbar的image的正常展示和相应选中和未选中情况下tabbaritem的title的字体颜色,就都设置好了!

 4,此外还可以设置底部工具栏的背景颜色,代码如下:

self.tabBar.barTintColor = UIColor.brown

最终效果如下:

swift - 之TabBarController的用法_导航栏_03

 

 5,push的时候隐藏tabbar

//隐藏tabbar
    override  func viewWillAppear(_ animated: Bool) {
        navigationController?.tabBarController?.tabBar.isHidden = true;
    }
    override func viewWillDisappear(_ animated: Bool) {
        navigationController?.tabBarController?.tabBar.isHidden = false;
    }

这样,在每个push到的页面添加这2个方法,就可以实现隐藏tabbar,当然故事版时候,会有相应的设置!

 

基本的构建就完成了,只是最基本的,如果大家有好的自定义方案也可以共享下!

 

作者:稻草人11223

标签:named,image,tabBarItem,let,TabBarController,UIImage,用法,swift,图标
From: https://blog.51cto.com/u_13188203/7230180

相关文章

  • curl的用法| curl是什么意思
    骑士李四记录;1.在服务器上查看请求是否返回正常:curl-ihttp://127.0.0.1:8080/api/abc返回这个表示请求返回ok。更多参考大神笔记:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html......
  • Vue3内置组件suspense用法
    1、作用在使用异步组件时,由于需要等待组件加载完成后才能显示,因此可能会出现页面空白或显示错误信息的情况。而Suspense组件的作用就是在异步组件加载完成前显示一个占位符,提高用户体验。2、用法首先子组件AsyncShow:使用了promise包裹代码<template><div><h1>{{re......
  • iOS开发Swift-函数
    1.函数的定义和调用funcgreet(person:String)->String{//函数名传入值传入值类型返回值类型letgreeting="Hello"+personreturngreeting}print(greet(person:"Anna"))//调用2.函数的参数与返回值 (1)无参函数funcsayHello()->......
  • C#log4net用法
    新建一个名为log4net.config的文件,然后把下面一段粘贴进去<?xmlversion="1.0"encoding="utf-8"?><configuration> <log4net> <!--OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL--> <!--SetrootloggerleveltoERRORanditsappend......
  • python的with的用法
    with语句是Python中用于处理资源的一种便捷方式。它提供了一种在使用完资源后自动关闭或释放资源的方法,无论代码块是否正常执行或是否发生异常。使用with语句的基本语法如下: withexpression[asvariable]:#代码块 在with语句中,expression是一个返回上下文管理器......
  • git的用法
    gitclonexxxx.git1,查看分支:gitbranch2,切换分支:gitcheckoutdev3,查看文件修改情况:gitstatus4,添加上传的文件:gitaddproductservice/*5,备注信息:gitcommit-m'test'上传:gitpush-uoriginmaster-ff强制上传。gitpulloriginmaster生成master分支;6,指定用......
  • iOS开发Swift-控制流
    1.For-In循环//集合循环letnames=["a","b","c"]fornameinnames{print("Hello,\(name)!")}//次数循环forindexin1...5{print("Hello!+\(index)")}//不需要值时可以使用_来忽略此值for_in1...5{pri......
  • iOS开发Swift-集合类型
    集合基本类型:数组Array(有序),集合Set(无序不重复),字典Dictionary(无序键值对)1.数组Arrays(1)数组的表示Array<Element>[Element] (2)创建空数组varsomeInts:[Int]=[]someInts.count//数组长度 (3)带值数组vara=Array(repeating:0.0,count:3)//[0......
  • Swift中指针UnsafePointer的常见用法
    指针类型//基本指针UnsafePointer<T>constT*UnsafeMutablePointerT*//集合指针UnsafeBufferPointerconstT*//指向一个连续已知类型区域,可以看成一个集合,并支持集合操作UnsafeMutableBufferPointerT......
  • git 恢复相关命令用法
    git恢复相关命令用法上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。gitadd files 把当前文件放入暂存区域。gitcommit 给暂存区域生成快照并提交。gitreset-- files 用来撤销最后一次gitadd files,你也可以用gitreset 撤销所有暂存区域......