iOS——UITabBarController

2023-05-16

一、UITabBarController简介

1.UITabBarController 对象可以保存多个 视图控制器 并进行切换,并且底部还会有一个  工具栏(UITabBar),工具栏里会有多个标签项(UITabBarItem)
2. 当向 UITabBarController 对象中加入一个 UIViewController 对象时,系统会在 工具栏 自动创建一个 UITabBarItem对象并将其与加入的 UIViewController 对象关联起来,即点击当前的 UITabBarItem 对象时,就会显示该 UITabBarItem 对象所关联的 UIViewController 对象的视图
3. UITabBarController 对象默认会显示第一个 UIViewController 的视图,此时,并不会加载其他 UIViewController 的视图,只要当需要显示某个 UIViewController 的视图时,才会对其加载,否则就不加载

二、UITabBarController 属性

1. 保存视图控制器的数组
1)保存 UIViewController 的数组

@property(nullable,nonatomic,copy)NSArray<__kindofUIViewController *> *viewControllers;


2)一次性设置保存 UIViewController 的数组,并设置动画效果

- (void)setViewControllers:(NSArray<__kindofUIViewController *> * __nullable)viewControllers animated:(BOOL)animated;


假如在此之前已经创建好了 6 个 UIViewController 对象,并且都是用了系统的 UITabBarItem 对象,因为本节的重点不在这,所以就省略了


代码如下

// 创建 UITabBarController 对象
UITabBarController * tabBarController = [[UITabBarController alloc] init];
没有动画显示

tabBarController.viewControllers = @[firstVC, secondVC, thirdVC, fourthVC, fifthVC, sixthVC];

使用动画显示

[tabBarController setViewControllers:@[firstVC, secondVC, thirdVC, fourthVC, fifthVC, sixthVC] animated:YES];
虽然结果和上面的图一致,但是在显示 工具栏的上的 UITabBarItem 对象是有一个动画的

2. 选中的 UIViewController 

1)设置选中的 UITabBarItem 的索引

@property(nonatomic)NSUInteger selectedIndex;


2)设置选中的视图控制器

@property(nullable,nonatomic,assign)__kindofUIViewController *selectedViewController;


因为 UITabBarController 对象在启动时会默认显示第一个 UIViewController 对象,即索引为 0 的 UIViewController


设置启动时显示下表为 3 的 UIViewController,即第 4 个 UIViewController 对象

tabBarController.selectedIndex = 3;

tabBarController.selectedViewController = fourthVC;

如图,启动时就已经显示在第 4 个 UIViewController



3. ”更多“ 

当 UITabBarController 对象显示的 UIViewController 对象超过 5 个时,系统会自动创建一个 UINavigationController 对象,并将在原本显示第 5 个 UITabBarItem 的地方显示一个 “more” 的 UITabBarItem 对象,并且该 “more” 对应的 UIViewController 是一个 UINavigationController 对象,然后再把第 5 个以后的 UIViewController 都加入到这个 UINavigationController 对象的栈中
1)返回 “more” 对应的 UINavigationController 对象

@property(nonatomic,readonly)UINavigationController *moreNavigationController;


2)保存 “更多” 中的视图控制器对象

@property(nullable,nonatomic,copy)NSArray<__kindofUIViewController *> *customizableViewControllers;


6. 获取 标签栏 对象

就是 UITabBarController 对象下方的工具条,一个 UIViewController 对象在 tabBar 中对应一个 UITabBarItem 对象

@property(nonatomic,readonly)UITabBar *tabBar;


8. 代理对象

@property(nullable,nonatomic,weak)id<UITabBarControllerDelegate> delegate;


三、UITabBarControllerDelegate

1. 点击 UITabBarItem 时调用,控制哪些 UIViewController 能被点击
返回 YES : 能被点击;返回 NO 时,不能被点击(也就是说不能调用 2 的方法)
viewController : 发送该消息的接受者将 viewControllers 属性传递给 viewController

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;

2. 当选中某一个 UIViewController 时调用该方法(即在 UITabBar 中选中某个 UITabBarItem)

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;


3. 开始 编辑 之前时调用

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindofUIViewController *> *)viewControllers;


4. 结束 编辑 之前时调用

changed : 若是改变了视图控制器的顺序,则返回 YES;否则返回 NO

- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindofUIViewController *> *)viewControllers changed:(BOOL)changed;


5. 已经结束编辑时调用

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindofUIViewController *> *)viewControllers changed:(BOOL)changed;


6. 监控屏幕切换;返回 屏幕切换的枚举

- (UIInterfaceOrientationMask)tabBarControllerSupportedInterfaceOrientations:(UITabBarController *)tabBarController;


7. 屏幕首选的方向

- (UIInterfaceOrientation)tabBarControllerPreferredInterfaceOrientationForPresentation:(UITabBarController *)tabBarController;


四、分类 UIViewController (UITabBarControllerItem)

1. 当前 UIViewController 的 UITabBarItem,如果要设置当前 UIViewController 的 UITabBarItem 的标题等,就要先获取该 UIViewController 的 tabBarItem 对象

@property(null_resettable,nonatomic,strong)UITabBarItem *tabBarItem;


2. 获取当前 UIViewController 的 UITabBarController 对象,如果有多个 UIViewController 对象都在同一个 UITabBarController 中,那么返回的是同一个 UITabBarController 镀对象

@property(nullable,nonatomic,readonly,strong)UITabBarController *tabBarController;


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

iOS——UITabBarController 的相关文章

  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • UILabel UILongPressGestureRecognizer 不起作用?

    我怎样才能得到UILongPressGestureRecognizer在 uilabel 当我实现以下代码时 它不会调用该函数 那么请告诉我我做错了什么 UILongPressGestureRecognizer longPress UILo
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 具有动态警报正文的快速本地通知

    所以我可以创建一个像这样的本地通知 var localNotification UILocalNotification localNotification fireDate NSDate timeIntervalSinceNow 7 loc
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 从 NavigationController 中删除 ViewController 后 AVPlayer 继续播放

    因此 我在项目中使用 ARC 当我添加 AVPlayerLayer 时 它工作得很好 但当我从 UINavigationItem 中弹出 UIViewController 时 视频继续在后台播放 有谁知道你会如何处理这个问题 这似乎是一件很
  • SwiftUI:动态“列表”中的“切换”在重用时会破坏其布局?

    我试图展现一种动态List行包含Toggle元素 这Toggle最初布局正确 但是当它们滚动进和滚出视图时 即单元格重用时 它们的布局会中断 最小示例代码 import SwiftUI struct SwitchList View var
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • HTML 分页

    有没有html分页的开源项目 我正在为 iPhone 开发一个应用程序 我想在 UIWebView 上显示 HTML 文件 并且不希望用户向下滚动以查看屏幕上未显示的剩余内容 我想在第二个 UIWebView 上显示剩余的内容 我怎样才能做
  • 我们能否检测用户是否通过主页按钮或锁定按钮离开而没有监听 darwin 通知?

    我最近向应用程序商店提交了一个新的二进制文件并将其发送以供审核 但它立即被拒绝并显示以下消息 不支持的操作 不允许应用程序监听设备锁定通知 经过一番挖掘后 我发现我们无法使用 com apple springboard lockstate
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • ios - 在哪里放置 s.static_framework = true

    我在 CocoaPods 中的级别为 0 当我使用pod install有一个错误说 The Pods App target has transitive dependencies that include static framework
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图

随机推荐

  • Flutter VS React Native,应该选哪个?

    移动行业渴望进行一场革命 xff0c 以遏制移动应用程序开发过程中出现的成本高 耗时长等问题 因此 xff0c 该变革以跨平台开发的形式出现 现在 xff0c 维护代码和开发应用程序对于开发人员来说变得简单且省时 那么对于开发者来说 xff
  • VScode如何去打开html页面

    首先在打开VsCode 找到扩展商店 搜索open in browser插件 第二步在html页面中点击右键 找到Open In Default Browser 打开浏览器 Open In Other Browser 选择其他的浏览器打开
  • 2、SPSS的基本知识

    目录 一 SPSS软件的安装和启动 二 SPSS的基本操作环境 xff08 1 xff09 数据编辑窗口 xff08 主程序窗口 xff09 xff08 2 xff09 SPSS结果输出窗口 三 SPSS软件的退出 四 SPSS软件的三种基
  • STM32F429IGT6移植FreeRTOS时遇到的问题汇总

    一 学习环境 编译环境 xff1a keil 开发板 xff1a 野火STM32F429开发板 二 遇到的问题 问题一 xff1a error This port can only be used when the project opti
  • 一篇搞懂关于计算机的减法运算

    一篇搞懂关于计算机的减法运算 减法相减结果为正的减法相减结果为负数的减法 减法 相减结果为正的减法 如下一篇拙言 xff0c 是自己平时的总结 xff0c 如有错误欢迎各位大佬指正 相信你一定听说过 xff0c 补码 xff0c 取反加一等
  • 使用Dev C++建立工程文件调用不同文件下的c文件

    在学校嵌入式软件小组课上直播翻车 xff0c 很尴尬 xff01 xff01 xff01 xff01 然后我结束以后仔细找了一歘啊错误原来是因为没有主一头文件的包含形式导致的 我先介绍一下C语言包含头文件时 lt gt 和 34 34 区别
  • Java Spring Boot 热部署

    一 IDEA配置 当我们修改了Java类后 xff0c IDEA默认是不自动编译的 xff0c 而spring boot devtools又是监测classpath下的文件发生变化才会重启应用 xff0c 所以需要设置IDEA的自动编译 x
  • 新手上路——树莓派3B+系统安装

    首先拿到树莓派后是万分开心 xff0c 索然我不知道他是个什么 xff0c 能用来干什么 xff0c 不过貌似是个电脑主机 xff0c 所以就上手玩儿了 刚拿到手里然后去树莓派基金会网站 xff08 https www raspberryp
  • 新手上路——树莓派3B+安装cmake

    安装smake有两种方法地一种是自动安装 第二种是手动安装 建议使用手动安装 xff0c 自动安装不一定是你想要的版本 xff0c 现介绍第一种 方案一 xff1a sudo apt install cmake 这样就结束了方便 快捷 方案
  • 新手上路——树莓派3B+安装OpenCV(你想要的版本)

    啊啊啊啊啊 xff01 xff01 安装六七次都没成功的我近乎崩溃 xff0c 这次终于成功了 xff0c 失败了无数次的我好像让人来教我一下啊 xff0c 可惜没有 xff0c 还是自己琢磨薄吧 xff0c 为了帮助到更多的人我写了一下我
  • 舵机控制使用

    本文仅介绍固定180度舵机 MG996R舵机 SG90舵机 MG90S舵机等 引脚功能 xff1a 舵机的转动角度跟输入脉冲有关 xff0c 详细看下表 xff1a 可以发现一个规律 xff1a 角度每次增加45度 xff0c 高电平时间相
  • Python之You-Get库学习

    今天学习一下You Get这个第三方库 xff0c 体验一下视频下载的快乐 简介 You Get库是一个基于Python3的视频下载工具 xff0c 支持多数国内外主流视频站点的视频下载 看一下项目主页的README md 真的是十分的ni
  • CMake编译CUDA项目报错

    CMake编译CUDA项目报错 现象解决方法结果 现象 configure后显示如下错误 CMake Error at C Program Files CMake share cmake 3 26 Modules CMakeDetermin
  • 程序设计思维 week11 作业

    A 题意 蒜头君从现在开始工作 xff0c 年薪 NN 万 他希望在蒜厂附近买一套 6060 平米的房子 xff0c 现在价格是 200200 万 假设房子价格以每年百分之 KK 增长 xff0c 并且蒜头君未来年薪不变 xff0c 且不吃
  • windows->wsl&ubuntu config

    ref https blog csdn net weixin 45883933 article details 106085184 安装前配置 ref 适用于 Linux 的 Windows 子系统安装指南 Windows 10 1 启用
  • 线程阻塞与唤醒

    线程阻塞与唤醒的方法如图 xff1a span class hljs keyword package span newThread span class hljs keyword import span java util Scanner
  • Android的死机、重启问题分析方法

    Android的死机 重启问题分析方法 原文链接 xff1a https blog csdn net jinlu7611 article details 50592385 1 死机现象 1 1 死机定义 当手机长时间无法再被用户控制操作时
  • JAVA小白工具人PHPer

    PHP写多了 xff0c 确实很松散 xff0c 什么都是array xff0c 不像java这么资深 xff0c 个个都是大佬 慢慢学习 1 二维数组取某一列的值 php的写法 array column array 39 id 39 ja
  • 当大恒相机采集帧率没有达到理论帧率时

    当大恒相机采集帧率没有达到理论帧率时 xff0c 可设置最大带宽
  • iOS——UITabBarController

    一 UITabBarController简介 1 UITabBarController 对象可以保存多个 视图控制器 并进行切换 xff0c 并且底部还会有一个 工具栏 xff08 UITabBar xff09 xff0c 工具栏里会有多个