1、概述

跟UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是QQ、微信等应用。

2UITabBarController的简单使用

UITabBarController的使用步骤:

(1)初始化UITabBarController

(2)设置UIWindow的rootViewController为UITabBarController

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

3UITabBarController的子控制器

UITabBarController添加控制器的方式有2种:

(1)添加单个子控制器

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

(2)设置子控制器数组

@property(nonatomic,copy) NSArray *viewControllers;

(3)根据索引选择子控制器

self.selectedIndex = 0;//选中第0个子控制器

4UITabBar

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

例如:如果UITabBarController有4个子控制器,那么UITabBar的结构大致如下图所示:

5UITabBarButton

UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性决定:

例如:

UIViewController *vc1 = [[UIViewController alloc] init];

vc1.tabBarItem.title = @"联系人";

vc1.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor"];

点击相关tabBarItem后,系统会自动把按钮变为上图所示蓝色,并不需要提供蓝色的按钮图片了。也可以通过调用selectedImage方法设置点击后显示的图片。

例如:

childVc.tabBarItem.selectedImage =

[[UIImage imageNamed:selectedImageName]

imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

IOS7必须设置渲染模式为不渲染,否则选择后还会变成蓝色。IOS6不用设置。但IOS6没有此方法,所以用此方法前要根据系统版本进行分情况。例如:

#define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)

if (iOS7) {

childVc.tabBarItem.selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

} else {

childVc.tabBarItem.selectedImage = selectedImage;

}

也可以在storyboard中直接拖一个UITabBarControllerView过去,然后右键选择view controllers拖线到子控制器添加子控制器,如下图:

6App主流UI框架结构

7、         Modal

除了push之外,还有另外一种控制器的切换方式,那就是Modal。任何控制器都能通过Modal的形式展示出来。Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止。

Modal的形式展示控制器:

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

例如:

MJTwoViewController *two = [[MJTwoViewController alloc] init];

[self presentViewController:two animated:YES completion:^{

NSLog(@"展示MJTwoViewController完毕.......");//展示完毕会调用

}];

关闭当初Modal出来的控制器:

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

例如:

[self dismissViewControllerAnimated:YES completion:^{

NSLog(@"关闭MJTwoViewController....");//关闭后会执行

}];

iOS开发之UITabBarController的更多相关文章

  1. IOS开发之UITabBarController与UINavigationController混合使用

    ios开发中UITabBarController与UINavigationController混合使用是很多app的基础页面结构,下面是简单的的页面初始化的方法,在AppDelegate.m的 - ( ...

  2. iOS开发之UITabBarController和UICollectionView的使用

    这一篇要记录的是iOS开发中UITabBarController控件和UICollectionView控件的使用.APP跑起来之后的效果例如以下图: watermark/2/text/aHR0cDov ...

  3. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  4. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  5. iOS开发之UIImage等比缩放

    iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...

  6. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  7. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  8. iOS开发之info.pist文件和.pch文件

    iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...

  9. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

随机推荐

  1. 《JavaScript DOM 编程艺术 》 笔记

    一:这本书由几个案列带入知识点,通俗易懂.最大的收获莫过于作者多次提到的逐渐增强和平稳退化. "渐进增强"指的是给所用用户同等的基本使用体验,再根据用户终端的级别给予更高级的用户更 ...

  2. ContextMenu控件引用以及不用v4包的方法

    最近想撸个APP出来玩玩,本想用Yalantis出的SideMenu,结果因为依赖问题放弃了,改用他们家的ContextMenu. 如果你用了v4包 那么问题就比较简单了,直接打开项目中app中的bu ...

  3. javascript之自增自减典型运算(易错)

    JavaScript“自增”运算符与表达式 递增运算符(++)是一个一元运算符,该运算符可以将操作数进行递增操作,即每次增加1.递增运算符要求其操作数必须是变量.对象中的某个属性或数组中的某个元素,并 ...

  4. ZwQueryVirtualMemory枚举进程模块

    ZwQueryVirtualMemory算是枚举进程方法中的黑科技吧,主要是该方法可以检测出隐藏的模块(类似IceSword). 代码VS2015测试通过 再次奉上源码链接:https://githu ...

  5. sping整合hibernate之二:dao层开发

     在上一篇日志中将hibernate的会话工厂sessionFactory注入到了spring的容器中,但这样还不够,因为hibernate的增删改查是要使用事务机制的, 所以还要在spring中配置 ...

  6. c++ 调用dl里的导出类

    来源:http://blog.csdn.net/yysdsyl/article/details/2626033 动态dll的类导出:CPPDll2->test.h #pragma once // ...

  7. 本地Solr服务器搭建

    一.Solr官网下载http://lucene.apache.org/solr/下载Solr项目文件 在该项目文件中,可以找到我们在本地环境下运行Solr服务器所需要的资源文件,在这里我们以4.10. ...

  8. show_you_my_codes 001

    program 001 第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券), 使用 Python 如何生成 200 个激活码(或者优 ...

  9. 单点登录实现(spring session+redis完成session共享)

    一.前言 项目中用到的SSO,使用开源框架cas做的.简单的了解了一下cas,并学习了一下 单点登录的原理,有兴趣的同学也可以学习一下,写个demo玩一玩. 二.工程结构 我模拟了 sso的客户端和s ...

  10. Github创建分支

    一.clone Repository clone Github 上的Repository,如下: git clone git@github.com:FBing/design-patterns.git ...