TabBarController创建及使用方法简介

TabBarController创建及使用方法简介

大致讲解一下TabBarController的创建过程:

首先,我们需要一些视图,如创建UIControllerView类型的view1,view2,view3.

然后,我们需要创建 一个UITabBarController类型的实例tabBarView,然后我们将刚刚创建的View1,view2,view3添加到tabBarView中的viewcontroller这个数组中。

我们就完成了一个UITabBarController的创建

注意,一般这个TabBarControler是在appdelegate文件中创建的。因为这个TabBarController是作为我们根视图控制器使用的。

用代码在启动函数中实现一个UITabBarController实例的创建:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.NSArray *colorArray = [[NSArray alloc] initWithObjects:[UIColor redColor], [UIColor blueColor], [UIColor greenColor], [UIColor blackColor], nil];self.TabBarCV = [[UITabBarController alloc] init];self.View = [[NSMutableArray alloc] init];self.TabBarCV.delegate = self;for (int i = 0; i < [colorArray count]; i++) {ViewController *view = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];[view.view setBackgroundColor:[colorArray objectAtIndex:i]];view.title = [NSString stringWithFormat: @"%dst", i];[self.View addObject:view];}self.TabBarCV.viewControllers = self.View;self.TabBarCV.customizableViewControllers = self.View;self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];self.window.rootViewController = self.TabBarCV;[self.window makeKeyAndVisible];return YES;
}
效果图如下:


创建函数介绍:

上面创建实例的代码中。使用的是下面方法:

self.TabBarCV.viewControllers = self.View;
self.TabBarCV.customizableViewControllers = self.View;

这个方法可以创建多个view,如果view多于5个,那么左边会出现这个more的按钮,点击more,现实多余无法显示的界面。

下面那个方法就是设置允许我们editor(编辑)的view的,在这个customizableViewControllers的View,都是可以在more这个Navigation中编辑的。

同时,我们还可以使用另一种方法来添加view。如下:

[self.TabBarCV addChildViewController:view];

这个方法和上面的方法一样。但是使用这个方法就只能最多添加5个View。

自定义的设置TabBar中的标签item方法介绍:

我们可以自定义的设置TabBar中的标签item。使用下面的方法:

BarController *controller5 = [[BarController alloc] initWithNibName:nil bundle:nil];
controller5.tabBarItem = [[UITabBarItem alloc] initWithTitle:[self.titleArray objectAtIndex:i] image:[UIImage imageNamed:@"Ellipse 1"] selectedImage:[UIImage imageNamed:@"Ellipse 1"]];

当然我们也可以使用方法单独设置这些属性,如下:

[controller2.tabBarItem setTitle:@"test"];
[controller2.tabBarItem setSelectedImage:[UIImage imageNamed:@"Ellipse 1"]];
[controller2.tabBarItem setImage:[UIImage imageNamed:@"Ellipse 1"]];
效果图如下:


在TabBarController的View之间实现跳转的方法的介绍:

[self.tabBarController setSelectedIndex:2];
[self.tabBarController setSelectedViewController:[self.tabBarController.viewControllers objectAtIndex:2]];


TabBarController协议和协议方法介绍

我们在编写TabBarControlerView的时候,我们可以调用协议里面的一些方法,下面是协议里面的方法的介绍:

首先:我们要调用协议里面的方法,我们需要在响应的类里面遵循UITabBarControllerDelegate协议:

然后,我们要将自己的tabBarController和代理关联起来,self.tabBarController.delegate =self;

协议中主要调用的方法有:

//这个方法在我们选中tabBar的时候调用。
-(BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewControlle//这个方法在点击的时候调用
-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController//下面三个方法在点击more左上角的edited的时候调用
-(void) tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers
- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
-(void) tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed{
//其中,第一个方法在编辑tabBarItem的界面即将弹出的时候调用
//第二个方法在即将结束编辑tabBarItem的时候调用。里面的参数:view controller为tabBar Item 中的View和他们相关的位置;changed显示这个tabBarController中的item的位置有没有改变。
//第三个方法在结束编辑tabBar Item 的时候调用。参数和第二个方法一样。

首先三个方法实现点击下面的这个第三个图片的edit的时候调用的时候调用的。

                          

如何将IOS中的tabbar隐藏

一般我们都是在在push一个view的时候,将tabbar给隐藏掉,因此我们需要将添加下面的代码
self.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:vc animated:YES];

然后,我们需要在push的那个view中添加以下代码:
- (void)viewWillAppear:(BOOL)animated {[xxxTabBar setTabBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {[xxxTabBar setTabBarHidden:NO];
}



转载于:https://www.cnblogs.com/AbeDay/p/5026948.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python操作sqlite3 导入csv文件_[转载]SQLite 3导入导出成txt或csv操作

平时使用官方提供的sqlite3.exe工具来操作 sqlite的数据库,可以在网上下到。进入管理&#xff1a;sqlite3.exe d:\\test.db //假设数据是 d:\\test.db>.databases //显示所有数据库 和 mysql的 showdatabases;>.tables //显示当前数据库的表格 和 mysql 的show tables…

android人脸识别的背景图_Android 图片人脸识别剪切

场景在开发中我们经常需要对图片以人脸为中心进行剪切并显示&#xff0c;这时就需要下面这个工具了。实现效果实现效果项目参考及引用项目使用将下载的jar 和 .so 文件加入到项目中。API 说明在项目中使用如下API即可&#xff1a;CImageView这是一个继承ImageView的图片控件&am…

华为gre隧道全部跑静态路由

最终实现&#xff1a; 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做&#xff0c;没有用ospf&#xff0c;如果要用ospf&#xff0c;那么两边除了路由器上跑ospf&#xff0c;核心交换机也得用ospf r2配置&#xff1a; acl number 3000 rule 5 deny…

数组与串,串的实现,KMP,BF算法

数组是一种常用的数据结构&#xff0c;高级语言头提供了支持数组的基本操作&#xff0c;而且数组也是构成其他数据结构的重要组成。 数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列。 数组的任一个元素都可以用在数组的位置来表示。 数组与线性表区别&#xf…

libsvm python_LibSVM for Python 使用

经历手写SVM的惨烈教训(还是太年轻)之后&#xff0c;我决定使用工具箱/第三方库PythonLibSVM是开源的SVM实现&#xff0c;支持C&#xff0c; C&#xff0c; Java&#xff0c;Python &#xff0c; R 和 Matlab 等, 这里选择使用Python版本。安装LibSVM将LibSVM仓库的所有内容放入…

结对开发——求最大值

一、题目&#xff1a; 返回一个整数数组中最大子数组的和。 要求&#xff1a; 1.输入一个整形数组&#xff0c;数组里有正数也有负数。 2.数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。 3.求所有子数组的和的最大值。要求时间复杂度为O(n)。 二…

浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息

渗透攻击红队一个专注于红队攻击的公众号大家好&#xff0c;这里是 渗透攻击红队 的第 41 篇文章&#xff0c;本公众号会记录一些我学习红队攻击的复现笔记(由浅到深)&#xff0c;不出意外每天一更Powershell内网渗透一直以来都是一个热门话题&#xff0c;试想在一个大型的内网…

__bridge,__bridge_retained,__bridge_transfer

最近遇到类型转换需要添加__bridge等开始不是很理解&#xff0c;后面查询资料才知道在CFObject 与 NSObject 之间转换时&#xff0c;ARC是不能管理Core Foundation object的生命周期。 在CFObject 与 NSObject 之间转换时&#xff0c;需要用到__bridge,__bridge_retained,__bri…

thinkphp5 判断数据是否存在_ThinkPHP 5.1 中间件中判断要访问的操作是否存在

ThinkPHP 5.1 中间件中判断要访问的操作是否存在ifu25 • 2021 年 01 月 15 日按惯例还是吐槽 ThinkPHP 官方社区极度不友好&#xff0c;提问基本得不到答案&#xff0c;更很少有官方人员回复。ThinPHP 5.1 中间件判断 action 是否存在中间件public function handle($request, …

NodeJS 学习记录

一、环境 1. 操作系统&#xff1a;win7, 32位 2. nodejs版本&#xff1a;v0.12.0 3. npm版本&#xff1a;2.5.1 二、问题 1. npm安装镜像源问题 国外镜像源很慢&#xff0c;国内出名且公开的有淘宝&#xff0c;也有内部未公开的&#xff0c;比如我所在的公司 示例&#xff1a; …

(转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

转发&#xff1a;微软MVP 卢建晖 的文章&#xff0c;希望对大家有帮助。原文&#xff1a;http://blog.csdn.net/kinfey/article/details/44459625 编者语 &#xff1a; 昨晚写好的文章居然csdn不审核&#xff0c;这个也难怪人&#xff0c;但自己比较忙没办法。分享继续&#xf…

mysql sql执行过程_MySQL探秘(二):SQL语句执行过程详解

昔日庖丁解牛&#xff0c;未见全牛&#xff0c;所赖者是其对牛内部骨架结构的了解&#xff0c;对于MySQL亦是如此&#xff0c;只有更加全面地了解SQL语句执行的每个过程&#xff0c;才能更好的进行SQL的设计和优化。 当希望MySQL能够以更高的性能运行查询时&#xff0c;最好的办…

Java——容器(泛型)

【泛型】 起因&#xff1a;JDK1.4之前类型不明确<1>装入集合的类型都被当做Object对待&#xff0c;从而失去自己的实际类型。<2>从集合中取出时往往需要转型&#xff0c;效率低&#xff0c;且很容易出错。解决办法&#xff1a;<1>在定义集合的时候同时定义集…

quartz mysql 初始化_quartz scheduler 从数据库初始化

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

mysql group by 慢_mysql“group by”查询非常慢

我在一个有大约100k记录的表中有这个查询,它运行得很慢(3-4s),当我取出组时它更快(少于0.5s).我很想知道如何解决这个问题&#xff1a;SELECT msg.id,msg.thread_id,msg.senderid,msg.recipientid,from_user.username AS from_name,to_user.username AS to_nameFROM msgtable A…

拦截QT关闭窗口的CloseEvent

QDialog类下有一个虚函数 void QDialog::closeEvent ( QCloseEvent * e ) [virtual protected] 通过实现closeEvent函数&#xff0c;就可以以对关闭窗口消息进行拦截&#xff0c;比如程序还没有完成工作时&#xff0c;可以弹出警告窗口&#xff0c;即使用户确认退出操作…

mysql8.0本机登录要1秒_Mysql8.0的登录大坑……(忘记登录密码也可以这么搞)

关于安装和使用就不说了&#xff0c;属于基本操作了&#xff1b;我来重点记录一下关于使用前&#xff0c;使用navicat登录的时候报错&#xff0c;1130和2059查看安装后随机生成的密码&#xff1a; grep temporary password /var/log/mysqld.log原因&#xff1a;mysql8的密码验证…

Gmail邮箱添加域名解析

主机记录 MX 服务器地址 优先级 MX ASPMX.L.GOOGLE.COM. 10 MX ALT1.ASPMX.L.GOOGLE.COM. 20 MX ALT2.ASPMX.L.GOOGLE.COM. 20 MX ASPMX2.GOOGLEMAIL.COM. 30 MX ASPMX3.GOOGLEMAIL.COM. 30 MX ASPMX4.GOOGLEMAIL.COM. 30 MX ASPMX5.GOOGLEMAIL.COM. 3…

tidb vs mysql_一个长耗时SQL在TiDB和Mysql上的耗时测试

之前看到的TiDB和MySql的性能对比都是大量短耗时请求下的压测&#xff0c;单机情况下TiDB和MySql的确有些差距&#xff0c;不过笔者最近碰到的场景更多是sql要扫描的行数不小的情况下单sql比较耗时的问题&#xff0c;所以自己做了个简单测试这类型sql的耗时。TiDB单机环境部署g…

Oracle存储过程(转)

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明…