UI学习--分栏控制器

2024-06-16 20:04
文章标签 学习 ui 控制器 分栏

本文主要是介绍UI学习--分栏控制器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UI学习

  • 分栏控制器基础
    • 概念
    • 用法
  • 分栏控制器高级
    • 高级属性
  • 总结


分栏控制器基础

概念

分栏控制器可以理解为一个容器,可以容纳多个子视图控制器,并通过选项卡的方式进行切换。每个选项卡都与一个特定的视图控制器相关联,当用户点击不同的选项卡时,分栏控制器会自动切换到相应的视图控制器,显示对应的内容。
分栏控制器管理的视图关系为平行关系,而导航控制器管理的视图关系为层级关系
由以下几部分组成

  • 分栏控制器(TabBarController):作为主要的容器控制器,管理子视图控制器和选项卡。
  • 子视图控制器(ViewControllers):每个选项卡对应一个子视图控制器。每个子视图控制器负责管理和显示与其对应的内容。
  • 选项卡(Tabs):分栏控制器底部的一行固定标签,用于表示不同的功能或页面。可以通过点击不同的选项卡来切换到对应的子视图控制器。
  • 标题和图标(Title and Icon):每个选项卡通常包含一个标题和一个图标,用于显示相应子视图控制器的信息。

用法

先创建三个子视图控制器。我们在SceneDelegate文件中操作。
在这里插入图片描述

我们需要先创建控制器,然后创建分栏控制器对象,将所有需要被分栏控制器管理的对象添加到数组中,再将分栏控制器作为根视图控制器
我们介绍一下基础属性:

  • viewControllers:一个数组,用于指定每个选项卡对应的子视图控制器。可以通过设置该属性来添加或更改选项卡的数量和内容。
  • selectedIndex:当前选中的选项卡索引。可以通过设置该属性来切换选项卡,索引从0开始。
  • tabBar:分栏控制器的选项卡栏。可以通过该属性进行外观和行为的自定义设置,如修改选项卡的颜色、样式、图标等。
  • tabBar.tintColor:选项卡的颜色。可以设置该属性来改变选项卡图标和文字的颜色。
  • tabBar.barTintColor:选项卡栏的背景颜色。可以设置该属性来改变选项卡栏的背景色。
  • tabBar.translucent:选项卡栏是否半透明。设置为true时,选项卡栏会显示为透明效果;设置为false时,选项卡栏会显示为不透明效果。
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {//创建控制器一VCFirst *vcFirst = [[VCFirst alloc] init];//    vcFirst.view.backgroundColor = [UIColor blueColor];//创建控制器二VCSecond *vcSecond = [[VCSecond alloc] init];vcSecond.view.backgroundColor = [UIColor yellowColor];//创建控制器三VCThird *vcThird = [[VCThird alloc] init];vcThird.view.backgroundColor = [UIColor redColor];vcFirst.title = @"视图一";vcSecond.title = @"视图二";vcThird.title = @"视图三";//.语法会调用VCFirst,后面赋值覆盖了111vcFirst.view.backgroundColor = [UIColor blueColor];//创建分栏控制器对象UITabBarController *tbController = [[UITabBarController alloc] init];//创建一个控制器数组对象//将所有要被分栏控制器管理的对象添加到数组中NSArray *arrayAC = [NSArray arrayWithObjects:vcSecond,vcFirst, vcThird, nil];//将分栏视图控制器管理数组赋值tbController.viewControllers = arrayAC;tbController.tabBar.backgroundColor = [UIColor whiteColor];//将分栏控制器作为根视图控制器self.window.rootViewController = tbController;//设置选中的视图控制器的索引//通过缩影来确定显示哪一个控制器tbController.selectedIndex = 2;if (tbController.selectedViewController == vcThird){NSLog(@"........");}//设置分栏控制器的工具栏的透明度tbController.tabBar.translucent = NO;

效果:
在这里插入图片描述
点击视图二:
在这里插入图片描述
我们还可以将选项卡设置为图像:
在第一视图中我们写下如下代码:


#import "VCFirst.h"@interface VCFirst ()@end@implementation VCFirst- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//方法一//创建一个分栏按钮对象//参一:文字//参二:显示图片图标//参三:设置按钮的tag
//    UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTitle:@"111" image:nil tag:101];
//    
//    self.tabBarItem = tabBarItem;//根据系统风格创建分栏按钮//p1:系统风格设定UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:101];//按钮右上角的提示信息//通常用来提示未读的信息tabBarItem.badgeValue = @"22";self.tabBarItem = tabBarItem;
}

效果:
在这里插入图片描述

分栏控制器高级

我们先创建六个视图控制器,并创建分栏控制器定义好属性。
在一个分栏控制器中,最多显示五个卡栏,当超过五个卡栏时,会出现一个More的卡栏来储存其他视图。


- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).vcFirst *vc1 = [[vcFirst alloc] init];vcSecond *vc2 = [[vcSecond alloc] init];vcThird *vc3 = [[vcThird alloc] init];vcFour *vc4 = [[vcFour alloc] init];vcFive *vc5 = [[vcFive alloc] init];vcSix *vc6 = [[vcSix alloc] init];vc1.view.backgroundColor = [UIColor  greenColor];vc2.view.backgroundColor = [UIColor redColor];vc3.view.backgroundColor = [UIColor blueColor];vc4.view.backgroundColor = [UIColor blackColor];vc5.view.backgroundColor = [UIColor brownColor];vc6.view.backgroundColor = [UIColor greenColor];vc1.title = @"视图1";vc2.title = @"视图2";vc3.title = @"视图3";vc4.title = @"视图4";vc5.title = @"视图5";vc6.title = @"视图6";NSArray *arrayVC = [NSArray arrayWithObjects:vc1, vc2, vc3, vc4, vc5, vc6, nil];UITabBarController *tbc = [[UITabBarController alloc] init];tbc.viewControllers = arrayVC;tbc.tabBar.barTintColor = [UIColor redColor];//设置透明tbc.tabBar.translucent = NO;//字体变黑tbc.tabBar.tintColor = [UIColor blackColor];tbc.tabBar.barTintColor = [UIColor redColor];//tbc.tabBar.backgroundColor = [UIColor redColor];self.window.rootViewController = tbc;tbc.delegate = self;
}

效果:
在这里插入图片描述
点击More后:

在这里插入图片描述

高级属性

分栏控制器中还有四个协议方法。

//在启动编辑器前调用
- (void) tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers
{NSLog(@"编辑器前");
}
//点击选项卡调用
- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{if (tabBarController.selectedViewController == viewController) {NSLog(@"包的");}NSLog(@"选中编辑器");
}
//编辑结束前调用
- (void) tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
{NSLog(@"即将结束前!");
}
//编辑结束后调用
-(void) tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
{NSLog(@"vcs = %@", viewControllers);if (changed == YES){NSLog(@"顺序发生改变");}NSLog(@"已经结束编辑!");
}

效果:
在这里插入图片描述
更改视图二和视图三的位置后:
在这里插入图片描述

总结

以上就是分栏控制器的总结,主要学习了如何创建一个分栏控制器,以及使用图片作为提示,和分栏控制器的协议。

这篇关于UI学习--分栏控制器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067410

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件