OC中UITabBarController控制器
UITabBarController
UITabBarController(记为O)常用于管理多个导航控制器,例如有ABC三个导航控制器,可以:addChildViewController(记为A), addChildViewController(B), addChildViewController(C)将其添加,或者设置数组viewControllers=[A,B,C]。ABC称作子控制器,O称作父控制器(只是称谓)。它管理的控制器一旦加载内存不会释放,即不会从新加载。比如程序刚启动时只显示A(懒加载,只有需要时才加载),然后有A跳转B,程序会调用B的viewDidLoad,第二次切换到B时不会调用B的viewDidLoad,因为就没有从内存释放。
UITabBarButton(高49个点)里面显示的内容,由对应子控制器的tabBarItem属性决定.如果是导航控制器,如果设置了导航控制器的topViewController.title(应该是栈底控制器才合理,不过在向TabBar添加时导航控制器只有这一个控制器既是栈底也是栈顶),会改变两个地方,一个是TabBarController图 2,所示,另一个是UINavigationController的图 1。基于此,就可以实现TabBar和导航栏显示的title不一样:先设置topViewController.title,然后再设置tabBarItem覆盖。
图 1导航栏标题

图 2 TabBar

遵守了UITabBarControllerDelegate后可以做一些其它自定义处理,比如当从A跳转到B时想实现一些功能可在didSelectViewController函数中执行。另外可以自定义UITabBar。
另外,在设置图片时需要设置渲染方式,否则系统默认为蓝色渲染(很难看),方式如下:
viewcontroller.tabBarItem.image = [[UIImage imageNamed:@"tabbarNormal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
// 选中时图片
viewcontroller.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbarHighlight"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
一般需求中,文字的渲染颜色也是要设置的,否则也为系统默认,方式如下:
// 全局设置文字大小 颜色
UITabBarItem *item = [UITabBarItem appearance];
// UIControlStateNormal状态下的文字属性
NSDictionary *normal = @{
NSFontAttributeName:[UIFont systemFontOfSize:],
NSForegroundColorAttributeName:[UIColor colorWithRed:170.0/ green:170.0/ blue:170.0/ alpha:]
};
NSDictionary *selected = @{
NSForegroundColorAttributeName:[UIColor colorWithRed:1.0 green:0.54 blue:0.15 alpha:],
NSFontAttributeName:[UIFont systemFontOfSize:]
};
// UI_APPEARANCE_SELECTOR属性
[item setTitleTextAttributes:normal forState:UIControlStateNormal];
[item setTitleTextAttributes:selected forState:UIControlStateSelected]; // 最后再设置标题
viewcontroller.title = @"资讯";
Modal方式弹出一个控制器
- 一般将要弹出的控制器(vc)包装到导航控制器(包装后也可以使用push pop)。vc为nav根控制器(栈底)。Modal方式可以转场任意控制器。而且可以自定义(代码见代码部分)。
- 从当前控制器跳转到vc:[self presentViewController:nav animated:YES completion:nil];注意是跳转到nav。
- 从vc跳回:[self dismissViewControllerAnimated:YES completion:nil];这里的self指的时vc自己。注意是从vc跳转,也可以从nav跳转。
- 这两个函数是成对出现,例如:1 modal 2然后2以任意方式跳到3再到4再到5等等,只要2345任何一个调用dismiss都会跳回1;所以上面从vc可以跳转到self(隔一个导航控制器跳转)。
- 自定义转场准备工作
如果使用storyboard则一定会执行prepareForSegue方法,里面指定transitioningDelegate转场代理,指定modalPresentationStyle为custom,如果是手写代码则还要presentViewController执行跳转。
- 具体实现
遵守转场代理UIViewControllerTransitioningDelegate指定转场时长,转场动画的对象,dismiss的对象,遵守UIViewControllerAnimatedTransitioning实现转场动画,transitionContext上下文。
OC中UITabBarController控制器的更多相关文章
- OC中加载html5调用html方法和修改HTML5内容
1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...
- Swift: 比较Swift中闭包传值、OC中的Block传值
一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...
- 设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)
学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性.近段时间所看的两本书籍,<大话设计模式>里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C ...
- OC中NSClassFromString()与NSStringFromClass()的用法及应用场景
1.NSClassFromString()利用一个字符串创建一个类,我是在标签控制器中 UITabBarController中创建它的子控制器中使用的 - (void)viewDidLoad { [s ...
- OC中的结构体
一.结构体 结构体只能在定义的时候进行初始化 给结构体属性赋值 + 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称) +定义一个新的结构体,进行直接赋值 + ...
- java中的继承与oc中的继承的区别
为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 OC中的继承 1.OC中不允许子类和父类拥有相同名称的成员变量名:( ...
- OC中类别、扩展、协议与委托
一.类别(category) 类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法.(类别,接口部分的定义 ...
- OC中的私有变量和description
.OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private ...
- Oc中的数组
========================== 数组 ========================== 一.认识数组 oc中可以把NSObject对象的子类放到数组这个集合中,但是int.f ...
随机推荐
- ios基础之 透过页面跳转来认识 Strong 与 Weak
最近在自己做一个小程序,遇到了页面跳转的问题,然后上网一通乱搜,跳转的问题解决了,又有传值的问题.上面两个问题解决了,又发现内存比刚开始时多占用了2M,于是,各种内心纠结,想彻底 搞清楚strong ...
- SQL Server时间粒度系列----第6节基于当前日的小时数和分钟数与mysql unix_timestamp和from_unixtime的mssql实现
本文目录列表: 1.基于当前日的小时数和分钟数2.mysql unix_timestamp和from_unixtime的mssql实现 3.总结语 4.参考清单列表 基于当前日的小时数和分钟数 ...
- 数论 - 筛法暴力打表 --- hdu : 12876 Quite Good Numbers
Quite Good Numbers Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit ...
- C语言学习021:管道
将第一个程序的输出流作为第二个程序的输入流 ls /etc/ ---------显示etc下的所有文件及目录 grep rc -----------输出包含rac的内容 | -------连接管道 一 ...
- Get sdcard directory by adb
解决方案: adb shell echo $EXTERNAL_STORAGE I am making an application, which pulls files(Saved by andro ...
- NoSQL数据库介绍
NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...
- Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement
Connection.prepareStatement()函数出错,提示: Type mismatch: cannot convert from java.sql.PreparedStatement ...
- jsp错误路径跳转设置
<error-page><error-code>400</error-code><location>/king.html</location> ...
- [范例] Firemonkey TForm 实现 OnMouseLeave 事件 (適用 Win & OS X)
在 Firemonkey 的 TForm 并没有提供 OnMouseLeave 的事件,不过可以透过 OnMouseMove 来达到相同效果,请见代码: uses FMX.Consts; proced ...
- TabControl 显示彩色的图示 (XE6 Firemonkey)
提示:Delphi 10 Seattle 透过 TImageList 来指定图标,就能显示原来图标的颜色. 下列方法只适用于 XE6 XE6 Firemonkey 里的 TabControl 可以将切 ...