1、概述数组
跟UINavigationController相似,UITabBarController也能够轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是QQ、微信等应用。微信
2、UITabBarController的简单使用框架
UITabBarController的使用步骤:atom
(1)初始化UITabBarController索引
(2)设置UIWindow的rootViewController为UITabBarController图片
(3)根据具体状况,经过addChildViewController方法添加对应个数的子控制器it
3、UITabBarController的子控制器io
UITabBarController添加控制器的方式有2种:渲染
(1)添加单个子控制器select
- (void)addChildViewController:(UIViewController *)childController;
(2)设置子控制器数组
@property(nonatomic,copy) NSArray *viewControllers;
(3)根据索引选择子控制器
self.selectedIndex = 0;//选中第0个子控制器
4、UITabBar
若是UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton做为子控件。
例如:若是UITabBarController有4个子控制器,那么UITabBar的结构大体以下图所示:
5、UITabBarButton
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拖线到子控制器添加子控制器,以下图:
6、App主流UI框架结构
七、 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....");//关闭后会执行
}];