UITabBarController的简单使用和属性方法总结

2023-05-16

一、引言

        与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理方式是纵向的,采用push与pop切换控制器,标签的管理是横向的,通过标签的切换来改变控制器,一般我们习惯将tabBar作为应用程序的根视图控制器,在其中添加导航,导航中在对ViewController进行管理。

二、创建一个标签控制器

        通过如下的步骤,我们可以很简便的创建一个TabBarController:

UITabBarController * tabBar= [[UITabBarController alloc]init];
    NSMutableArray * controllerArray = [[NSMutableArray alloc]init];
    for (int i=0; i<4; i++) {
        UIViewController * con = [[UIViewController alloc]init];
        [con loadViewIfNeeded];
        con.view.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
        con.tabBarItem.image = [UIImage imageNamed:@"btn_publish_face_a.png"];
        con.tabBarItem.title=[NSString stringWithFormat:@"%d",i+1];
        con.title = [NSString stringWithFormat:@"%d",i+1];
        [controllerArray addObject:con];
    }
    tabBar.viewControllers = controllerArray;
    [self presentViewController:tabBar animated:YES completion:nil];

通过点击下面的标签按钮,可以很方便的切换控制器。如果我们的控制器数超过4个,系统会被我们创建一个more的导航,并且可以通过系统自带的编辑来调整控制器的顺序,如下:

       

三、UITabBarController的属性和方法

//管理的viewController数组
@property(nullable, nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
- (void)setViewControllers:(NSArray<__kindof UIViewController *> * __nullable)viewControllers animated:(BOOL)animated;
//选中的ViewControlle
@property(nullable, nonatomic, assign) __kindof UIViewController *selectedViewController;
//通过编号设置选中ViewController
@property(nonatomic) NSUInteger selectedIndex;
//当viewController大于4个时,获取"更多"标签的导航控制器
@property(nonatomic, readonly) UINavigationController *moreNavigationController; 
//这个属性设置的是可以进行自定义排列顺序的视图控制器,如上面第二张图中的,默认是全部
@property(nullable, nonatomic, copy) NSArray<__kindof UIViewController *> *customizableViewControllers;
//标签控制器中分装的标签栏
@property(nonatomic,readonly) UITabBar *tabBar NS_AVAILABLE_IOS(3_0);
//代理
@property(nullable, nonatomic,weak) id<UITabBarControllerDelegate> delegate;

四、关于标签栏TabBar

        通过自定义标签栏的一些属性,使我们可以更加灵活的使用tabBar。

1、UITabBar属性和方法

设置标签:

@property(nullable,nonatomic,copy) NSArray<UITabBarItem *> *items;  
//设置选中的标签    
@property(nullable,nonatomic,assign) UITabBarItem *selectedItem; 
- (void)setItems:(nullable NSArray<UITabBarItem *> *)items animated:(BOOL)animated;

设置自定义标签顺序:

//调用这个方法会弹出一个类似上面第二张截图的控制器,我们可以交换标签的布局顺序
- (void)beginCustomizingItems:(NSArray<UITabBarItem *> *)items;  
//完成标签布局
- (BOOL)endCustomizingAnimated:(BOOL)animated;   
//是否正在自定义标签布局
- (BOOL)isCustomizing;

设置tabBar颜色相关:

//设置渲染颜色,会影响选中字体和图案的渲染
@property(null_resettable, nonatomic,strong) UIColor *tintColor;
//设置导航栏的颜色
@property(nullable, nonatomic,strong) UIColor *barTintColor;

设置背景图案:

//设置导航栏背景图案
@property(nullable, nonatomic,strong) UIImage *backgroundImage;
//设置选中一个标签时,标签背后的选中提示图案 这个会出现在设置的item图案的后面
@property(nullable, nonatomic,strong) UIImage *selectionIndicatorImage;
//设置阴影的背景图案
@property(nullable, nonatomic,strong) UIImage *shadowImage

TabBar中标签的宏观属性:

//设置标签item的位置模式
@property(nonatomic) UITabBarItemPositioning itemPositioning;
//枚举如下
typedef NS_ENUM(NSInteger, UITabBarItemPositioning) {
    UITabBarItemPositioningAutomatic,//自动
    UITabBarItemPositioningFill,//充满
    UITabBarItemPositioningCentered,//中心
} NS_ENUM_AVAILABLE_IOS(7_0);
//设置item宽度
@property(nonatomic) CGFloat itemWidth;
//设置item间距
@property(nonatomic) CGFloat itemSpacing;

与导航栏类似,也可以设置tabBar的风格和透明效果:

//风格 分黑白两种
@property(nonatomic) UIBarStyle barStyle;
//是否透明效果
@property(nonatomic,getter=isTranslucent) BOOL translucent;

2、UITabBarDelegate

//选中标签时调用
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
//将要开始编辑标签时
- (void)tabBar:(UITabBar *)tabBar willBeginCustomizingItems:(NSArray<UITabBarItem *> *)items;          //已经开始编辑标签时         
- (void)tabBar:(UITabBar *)tabBar didBeginCustomizingItems:(NSArray<UITabBarItem *> *)items;           
//将要进入编辑状态时
- (void)tabBar:(UITabBar *)tabBar willEndCustomizingItems:(NSArray<UITabBarItem *> *)items changed:(BOOL)changed; 
//已经进入编辑状态时
- (void)tabBar:(UITabBar *)tabBar didEndCustomizingItems:(NSArray<UITabBarItem *> *)items changed:(BOOL)changed;

五、再看UITabBarItem

        和NavigationItem类似,标签栏上的item也可以自定义,一些方法如下。

初始化方法:

//通过标题和图案进行创建
- (instancetype)initWithTitle:(nullable NSString *)title image:(nullable UIImage *)image tag:(NSInteger)tag;
- (instancetype)initWithTitle:(nullable NSString *)title image:(nullable UIImage *)image selectedImage:(nullable UIImage *)selectedImage;
//创建系统类型的
- (instancetype)initWithTabBarSystemItem:(UITabBarSystemItem)systemItem tag:(NSInteger)tag;

UITabBarSystemItem的枚举如下:

typedef NS_ENUM(NSInteger, UITabBarSystemItem) {
    UITabBarSystemItemMore,//更多图标
    UITabBarSystemItemFavorites,//最爱图标
    UITabBarSystemItemFeatured,//特征图标
    UITabBarSystemItemTopRated,//高级图标
    UITabBarSystemItemRecents,//最近图标
    UITabBarSystemItemContacts,//联系人图标
    UITabBarSystemItemHistory,//历史图标
    UITabBarSystemItemBookmarks,//图书图标
    UITabBarSystemItemSearch,//查找图标
    UITabBarSystemItemDownloads,//下载图标
    UITabBarSystemItemMostRecent,//记录图标
    UITabBarSystemItemMostViewed,//全部查看图标
};

UITabBarItem常用属性:

//设置选中图案
@property(nullable, nonatomic,strong) UIImage *selectedImage;

下面这个属性可以设置item的头标文字:

 con.tabBarItem.badgeValue = @"1";

//设置标题的位置偏移
@property (nonatomic, readwrite, assign) UIOffset titlePositionAdjustment;

由于UITabBarItem是继承于UIBarItem,还有下面这个属性可以设置使用:

//标题
@property(nullable, nonatomic,copy)             NSString    *title;   
//图案    
@property(nullable, nonatomic,strong)           UIImage     *image;  
//横屏时的图案      
@property(nullable, nonatomic,strong)           UIImage     *landscapeImagePhone;
//图案位置偏移
@property(nonatomic)                  UIEdgeInsets imageInsets; 
//横屏时的图案位置偏移
@property(nonatomic)                  UIEdgeInsets landscapeImagePhoneInsets ;
//设置和获取标题的字体属性
- (void)setTitleTextAttributes:(nullable NSDictionary<NSString *,id> *)attributes forState:(UIControlState)state;
- (nullable NSDictionary<NSString *,id> *)titleTextAttributesForState:(UIControlState)state;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITabBarController的简单使用和属性方法总结 的相关文章

  • mysql5.7.37安装于centos7.9【离线】

    一 下载 下载地址 xff1a MySQL Download MySQL Community Server Archived Versions 找到你需要的版本及对应安装的环境点击下载 二 安装 1 将文件传输到服务器root跟目录下上 2
  • VirtualBox 5.2.42(Ubuntu 18.04 )修改虚拟机磁盘空间

    本人主要在Ubuntu上写代码 xff0c 用虚拟机装win10办公 xff0c 由于企业微信保存数据多 xff0c 还装了写办公软件 xff0c C盘越来越大 xff0c 需要扩大虚拟机容量 一 主机端修改 本人使用的是命令行修改 xff
  • Sublime Text 4 (Build 4143)激活与汉化

    Sublime 版本是Sublime Text 4 Build 4143 注册方法如下 xff1a 安装软件 xff1a 去官方站点下载并安装 文件 xff1a sublime text build 4143 x64 setup 第一步 x
  • moment.js在vue中的使用及时间插件moment.js的常用时间格式总结

    1 前言 xff1a 本文仅针对时间插件moment js在vue中结合elm组件的基本使用及最常见的几种时间格式总结 xff0c 可视为 cv 大法的精髓之作 xff08 极大提高开发效率 xff0c 算了 xff0c 直接说懒吧 xff
  • centos6使用Epel源找寻软件包Nginx

    我们在Centos下使用yum安装时往往找不到rpm的情况 xff0c 官方的rpm repository提供的rpm包也不够丰富 xff0c 很多时候需要自己编译很痛苦 xff0c 而EPEL恰恰可以解决这两方面的问题 第二个解决问题是换
  • 机器学习算法: 逻辑回归的介绍和应用

    逻辑回归的介绍 逻辑回归 xff08 Logistic regression xff0c 简称LR xff09 虽然其中带有 34 回归 34 两个字 xff0c 但逻辑回归其实是一个分类模型 xff0c 并且广泛应用于各个领域之中 虽然现
  • Linux下c++程序内存泄漏检测代码范例

    Linux下对于程序内存泄漏检测的方法很多 xff0c 最常用的的莫过于使用valgrind工具 但是valgrind相当于让程序在虚拟机中运行 xff0c 会带来较大的系统资源开销 xff0c 还会对程序的运行效率产生较大影响 xff0c
  • mount: unknown filesystem type 'LVM2_*'解决方案

    解决办法 xff1a 需要安装 lvm2 yum install lvm2 然后按一下步骤 xff1a 1 查看物理卷 xff1a pvs PV VG Fmt Attr PSize PFree dev sda2 VolGroup00 lvm
  • 更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数

    更相减损法和辗转相除法 xff08 GCD xff09 求最小公倍数和最大公约数 标签 xff08 空格分隔 xff09 xff1a 算法 算法竞赛 这两种算法平时经常听到 xff0c 听起来也很装逼 xff0c 但是我老是忘了他们的原理
  • Python 任意输入n个数,输出最大值和最小值

    定义一个标记判断是否是第一次输入 flag 61 True 给最大值和最小值赋一个初始值 max 61 min 61 1 while死循环 while 1 输入一个整数 n 61 float input 39 请输入一个数字 39 判断输入
  • WSL1安装rust报错thread ‘main‘ panicked的解决方法

    根据https www rust lang org tools install xff0c WSL安装rust使用命令 curl proto 39 61 https 39 tlsv1 2 sSf https sh rustup rs sh
  • 从远程服务器通过SSH连接WSL或WSL2

    方法一 xff08 简单方法 xff09 xff1a 参考THE EASY WAY how to SSH into Bash and WSL2 on Windows 10 from an external machine Scott Han
  • VcXsrv XLaunch 闪退 failed to bind listener 的解决方法

    在通过 VcXsrv 配置 X11 forwarding 时 xff0c 打开 XLaunch xff0c 却屡次在启动后闪退 xff0c 而 VcXsrv 主程序却能正常启动 通过 net stop winnat 取消端口排除范围后仍然闪
  • SerDes interface参考设计_CDR设计(5)

    5 CDR设计 CDR一直是比较热门的研究方向 xff0c 现在比较主流的方法有接收端输入数据和本地时钟的关系将其进行分类 常见的 CDR 拓扑结构可以分为如下的三大类 xff1a xff08 1 xff09 采用反馈相位跟踪结构 如 PL
  • Http请求中Content-Type讲解

    言 xff1a 在Http请求中 xff0c 我们每天都在使用Content type来指定不同格式的请求信息 xff0c 但是却很少有人去全面了解content type中允许的值有多少 xff0c 这里将讲解Content Type的可
  • 5分钟搭建自己的代码托管平台gitlab

    熟练的使用git和github已经成为了每个程序员必备的技能 git可以使我们更好的管理和维护自己的代码 xff0c 可以使团队成员之间以更高效的方式进行工作 xff0c github作为一个免费好用的代码托管平台 xff0c 在一定程度上
  • 【小白向】手把手教你发布自己写的HTML静态网页

    相对于C 43 43 JAVA等编程语言的复杂难学 xff0c HTML CSS JS可以说是对刚接触计算机的同学最友好的编程语言了 特别是随着主流浏览器都支持了HTML5 CSS3 xff0c 就算是新手 xff0c 只要费点心思 xff
  • 用轻量服务器搭建自己的pdf在线工具箱(支持pdf压缩以及pdf OCR)

    上篇文章中我们讲了怎么利用腾讯轻量云服务器搭建一个PDF在线压缩工具 xff0c 今天我们来搭建一个更强大的工具 xff0c 不仅支持PDF在线压缩 xff0c 还支持PDF OCR文字识别 前言 前两天需要压缩一个pdf文件 xff0c
  • 用轻量服务器搭建imgproxy来获取不同尺寸的图片

    现在很多站长都喜欢搭建一个自己的私有图床来管理图片 xff0c 使用的一般都是第三方的开源图床程序 有时候可能第三方的图床程序不能完全满足我们的需要 xff0c 比如说 xff0c 我们上传了一张图片以后 xff0c 在不同的页面下 xff
  • 在轻量服务器上使用NextList搭建OneDriver列表程序

    什么是列表程序 xff1f 我们平时都会使用各种各样的网盘程序来把我们的文件保存到互联网上 xff0c 然后在需要的时候再从网盘中下载文件 一般情况下 xff0c 浏览文件列表以及下载文件都必须先登录网盘账号 xff0c 如果我们想要把文件

随机推荐

  • 良心云最近活动是真多啊,一波接一波,大伙有需要的上车

    1 轻量云2核免费升配4核 直接去控制台选择248套餐升级就行 xff0c 有这个配置的可以去操作一下 xff0c 截止到这个月底 我已经升了 附上轻量控制台链接 xff1a https console cloud tencent com
  • beego打包在windows上闪退

    打包拿到其他windows机器上运行 xff0c 直接闪退无法正常运行 没办法 xff0c 在cmd下运行可执行文件 发现又以下报错 xff1a ORM 2020 09 11 14 29 12 register db Ping 96 def
  • Debian11.3配置SSH允许root用户远程登录系统

    系统版本 root 64 localhost cat etc os release PRETTY NAME 61 34 Debian GNU Linux 11 bullseye 34 NAME 61 34 Debian GNU Linux
  • Shell 脚本常用命令

    Shell 脚本的概念 将平时使用的各种Linux命令按顺序保存 xff08 堆叠 xff09 到一个文本文件中 xff0c 添加上执行权限 xff0c 就是一个Shell脚本 将要执行的命令按先后顺序保存到一个文本文件 给该文件可执行权限
  • 来,看看记事本里会变成乱码的字……不仅仅是“联通”而已……

    众所周知 xff0c 联通 这两个字直接默认保存到记事本里会出现乱码 xff0c 变成小黑块 具体原因网上解释很多 xff0c 总结起来就一句话 xff1a 联通 的内码是0xC1 1100 0001 0xAA 1010 1010 0xCD
  • Python读取Word表格数据

    import docx from docx import Document 导入库 path 61 34 E python data 1234 docx 34 文件路径 document 61 Document path 读入文件 tabl
  • Python:下载和安装Pygame

    1 下载Pygame包 注意 xff1a 根据Python版本和Windows系统的位数选择要对应版本的Pygame包 官网地址 xff1a http www pygame org download shtml 其中 xff0c 如果Pyt
  • python 编写input和output函数,输出学生信息

    题目 xff1a 编写input 和output 函数输入 xff0c 输出5个学生的数据记录 解释 xff1a 可以通过函数的方式实现 xff0c 也可以用类的方式实现 xff0c 下面举例用类的方法实现 xff1a span class
  • python 调整行和列

    在 Excel 中 xff0c 调整行和列的大小非常容易 xff0c 只要点击并拖动行的边缘 xff0c 或列的 头部 但如果你需要根据单元格的内容来设置行或列的大小 xff0c 或者希望设置大量电 子表格文件中的行列大小 xff0c 编写
  • Word 文件转换为 markdown

    本文主要介绍在Ubuntu系统下面如何将 word 文件转换为 markdown 文件 第一步 xff1a 安装 unoconv 和 pandoc su span class operator span class keyword styl
  • VS2013平台搭建——关于无法打开“kernel32.lib”和无法运行“rc.exe”的解决方法

    背景 xff1a 由于项目需要 xff0c 必须使用VS2013作为开发平台 由于以前一直使用的是VS2010 xff0c 平台搭建时傻瓜式下一步到底就完成了 xff0c 这次遇到了点小困难 xff0c 找了点资料解决了 留个记录 xff0
  • iOS autolayout自适应cell高度时使用estimatedRowHeight的一些问题

    estimatedRowHeight是一个预估高度 xff0c 再iOS11之前默认是0 xff0c 也就是默认关闭 xff0c 在iOS11下 xff0c 默认44 再iOS11下也可以让estimatedRowHeight 61 0来关
  • 解决关闭deepin 15.11“自动索引内置磁盘”后仍然卡顿的问题

    关闭文件管理器中 自动索引内置磁盘 后 xff0c 查看iotop xff0c 已经没有占用磁盘的程序 xff0c 然而系统仍然卡顿 由于使用过程中听到磁盘频繁休眠 启动 xff1b 并且系统使用中卡死 以及待机后启动并卡死 xff0c 强
  • 打牌(求牌型方案数)

    问题描述 有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是 0 到 A 1 xff09 和一个花色 xff08 整数 xff0c 记为b xff0c 范围区间是 0 到 B 1 扑克牌是互异的 x
  • 滑动窗口【区间最大值区间&最小值】【单调队列】

    问题描述 ZJM 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 ZJM 想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3
  • Q老师的考验【矩阵快速幂】【斐波那契数列】

    问题描述 Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一个新的数列 f x 来考一考大家 数列 f x 定义
  • Q老师度假【动态规划dp】【矩阵快速幂优化】

    问题描述 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期 假期中不同的穿衣方式会有不同的快乐值 已知 Q老师 一共有 M 件衬衫 xff0c 且如果昨天穿的是衬衫 A xff0c 今天穿的是衬衫 B xff0c 则 Q老师 今天可以获得
  • 插值算法[数学建模]

    插值 插值算法一维数据插值方法分段线性插值分段二次插值 xff08 分段抛物插值 xff09 拉格朗日插值法龙格现象 牛顿插值法埃尔米特插值法分段三次埃尔米特插值PCHIP 样条插值三次样条插值 n维数据插值应用 插值算法 在工程和数学应用
  • 时间序列【数学建模】

    时间序列 确定性时间序列分析方法移动平均法简单移动平均法加权移动平均法趋势移动平均法 指数平滑法一次指数平滑法二次指数平滑法三次指数平滑法 差分指数平滑法一阶差分指数平滑法二阶差分指数平滑法 具有季节性特点的时间序列的预测 平稳时间序列模型
  • UITabBarController的简单使用和属性方法总结

    一 引言 与导航控制器相类似 xff0c 标签控制器也是用于管理视图控制器的一个UI控件 xff0c 在其内部封装了一个标签栏 xff0c 与导航不同的是 xff0c 导航的管理方式是纵向的 xff0c 采用push与pop切换控制器 xf