文档章节

iOS中多控制器管理(下) UITabBarController

Li红墙
 Li红墙
发布于 2016/07/21 14:40
字数 902
阅读 3
收藏 0
点赞 0
评论 0

 

 

UITabBarController

    跟UINavigationController类似,UITabBarController也可以轻松管理多个控制器,轻松完成控制器之间的切换.

UITabBarController的简单使用

    UITabBarController的使用步骤:

    1> 初始化UITabBarController;

    2> 设置UIWindow的rootViewController为UITabBarController;

    3> 根据具体情况,通过addChildViewController方法添加对应个数的子控制器.

UITabBarController的子控制器

    添加单个子控制器

-(void)addChildViewController:(UIViewController *)childController;

 

    设置子控制器数组

@property(nonatomic,copy) NSArray *viewControllers;

 

UITabBar

    如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件.

UITabBarButton

    UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性实现.

    UITabBarItem有以下属性影响着UITabBarButton的内容

// 标题文字 
@property(nonatomic,copy) NSString *title;
// 图标 
@property(nonatomic,retain) UIImage *image;
// 选中时的图标 
@property(nonatomic,retain) UIImage *selectedImage;
// 提醒数字
@property(nonatomic,copy) NSString *badgeValue;

 

App主流UI框架结构

                

Modal

    除了push之外,还有另外一种控制器的切换方式,那就是Modal. 任何控制器都能够通过Modal的形式展示出来.

Modal的默认效果: 新控制器从屏幕的最底部往上钻, 直到盖住之前的控制器为止.

    以Modal的形式展示控制器

-(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion

 

    关闭当初Modal出来的控制器

-(void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;

 

自定义UITabBarController和TabBar

如何自定义TabBar

    1> 首先自定义UITabBarController : 新建一个类, 继承自UITabBarController ;

    2> 新建一个类, 继承自UIView, 用来做TabBar, 封装内部的按钮 ;

    3> 在自定义的UITabBarController 中创建自定义的TabBar ,添加到默认的UITabBar上面 .

 

导航栏主题

    为了保证整个项目的导航栏样式一样, 可统一设置导航栏的主题 ;

    取得导航栏的appearance对象, 操作它就能设置导航栏的主题 ;

UINavigationBar *navBar = [UINavigationBar appearance];

常用主题设置:

    1> 导航栏背景

-(void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics;

    2> 标题

@property(nonatomic,copy) NSDictionary *titleTextAttributes;
// 字典中能用到的key在UIStringDrawing.h中
// 最新版本的key在UIKit框架的NSAttributedString.h中

    3> iOS7返回按钮的箭头样式

@property(nonatomic,retain) UIColor *tintColor;

导航栏按钮主题

    导航栏的左上角和右上角都是UIBarButtonItem对象, 为了统一样式, 也可以设置UIBarButtonItem的主题.

UIBarButtonItem *item = [UIBarButtonItem appearance];

设置主题的方法:

    1> 背景

-(void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;

    2> 文字

-(void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;

    3> 导航栏返回按钮背景

-(void)setBackButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;

自定义导航栏控制器

    自定义导航栏控制器的步骤: 新建一个类, 继承自UINavigationController .

    自定义导航栏的价值 :

    1> 重写push方法就可以拦截所有压入栈中的子控制器, 统一做一些处理 .

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

    2> 重写pop方法就可以拦截所有子控制器的出栈 .

-(UIViewController *)popViewControllerAnimated:(BOOL)animated;

琐碎知识点

    为了在push控制器时隐藏UITabBar, 需要做以下设置:

viewController.hidesBottomBarWhenPushed = YES;

    initailize , load方法的区别:

    1> initailize ,load 都是类方法 ;

    2> 当一个类被装载进内存时, 就会调用一次 load 方法(当时这个类还不可用) ;

    3> 当第一次使用这个类时, 就会调用一次 initailize 方法.

状态栏的设置

    程序启动时隐藏状态栏, Hide during application launch

    程序启动完毕后再显示回状态栏(前提是状态栏交给了UIApplication管理) ;

    application.statusBarHidden = NO ;

© 著作权归作者所有

共有 人打赏支持
Li红墙
粉丝 0
博文 3
码字总数 2160
作品 0
UIViewControllerHierarchyInconsistencyException异常

IOS中的MVC MVC模式是一种经典的软件架构模式,基本上懂程序设计的人都了解或应用过MVC模式。多数面向对象的程序设计架构都得益于MVC模式来有效的划分程序中的对象的角色,组织对象之间的耦合...

big军
2013/01/10
0
0
iOS开发中标签控制器的使用——UITabBarController

iOS开发中标签控制器的使用——UITabBarController 一、引言 与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理方...

珲少
2015/11/13
0
0
一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者。本教程由 EntLib.com 团队编写。如有任何技术问题,欢迎留言。 电子版 – PDF 格式,支持iPhone、i...

entlib
2012/09/20
0
2
UITabBarController详解

 广州APP开发,微信开发,广州英趣信息科技开发部博客:当我们想要做一个界面类似 联系人 那样的程序时,就一定会用到 UITabBar,它可以帮我们添加、管理许多的Tab项, 使我们的程序包含不同...

广州英趣科技
2013/09/08
0
2
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0
UIView Animations 学习笔记(二)定制动画效果及切换效果

目录 UIView Animations 学习笔记(一)简介及API说明 UIView Animations 学习笔记(二)定制动画效果及切换效果 UIView Animation 学习笔记 应用示例 二、视图切换定制 2.1 基础说明 要创建...

灰大羊
2015/08/12
0
0
一步一步学习 iOS 6 编程(第四版)正式发布

所有范例程序及其截图都采用Xcode 4.4 和Xcode 4.5 最新版开发工具,本书包含了最新的iOS 6 开发技术,如自动布局(Auto Layout)、集合视图(Collection View)等等。 新增内容包括:分割视...

entlib
2012/10/25
0
2
(转)直接拿来用!最火的iOS开源项目(二)

“每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目...

孙启超
2013/06/21
0
1
c++ cout 控制精度、宽度、进制

设置以上这些属性均有两种写法 一种是调用cout的方法 暂且叫做方法写法 一种是用到iomanip的函数 叫做控制器写法 一、精度 控制器写法: cout << setprecision(5); cout << fixed; 方法写法:...

apachecn_飞龙
2014/03/06
0
0
iOS 7:用代码解决视图控制器的View整体上移问题

如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了。当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态...

mingxun
2014/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
14分钟前
0
0
http状态码与ajax的状态值

ajax状态值 1.1 200 & OK:状态请求成功

litCabbage
17分钟前
0
0
iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面EmptyView 沙盒文件浏览与分享调试控...

sunnyaigd
20分钟前
0
0
AngularJS配置.run()块中设置路由事件的监听器以及过滤未经授权的请求

AngularJS中的run方法初始化全局数据,只对全局作用域起作用,如$rootScope.多个控制器之间可以共享数据,如下代码所示: <script type="text/javascript"> var m1 = angular....

孟飞阳
21分钟前
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
30分钟前
1
0
基于阿里出得ng-Alain搭建后台管理系统

首先跟大家介绍一下ng_Alain(阿里团队出品) ng-alain技术栈基于 Typescript、Angular、g2、@delon 和 ng-zorro-antd,提前了解和学习这些知识会非常有帮助。 ng-alain 脚手架是基于 Angular ...

方宏春
34分钟前
1
0
Spring框架IOC和AOP的实现原理

一、IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转...

HaierBrother
37分钟前
1
0
C++模版编程实现Haskell的函数模式匹配特性[图]

C++模版编程实现Haskell的函数模式匹配特性[图]: 大神 Bartosz Milewski 在2009年写了一篇文章《What Does Haskell Have to Do with C++?》,使用C++实现Haskell函数式编程语言的一些特性。...

原创小博客
38分钟前
1
0
${value}

1、就算 mapper 里面配置的名称是configSql ,在xml 里面配置的时候要注意 报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflectio......

职业搬砖20年
44分钟前
1
0
Xamarin 学习笔记 - Layout(布局)

本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1227733/Xamarin-Notes-Xamarin-Forms-Layouts 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案...

葡萄城技术团队
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部