2016.01.21 UITabBarController
2016-01-21 19:34
447 查看
UITabBarController是IOS中很常用的一个viewController。UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的container viewController中。可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是QQ、微信、微博等应⽤。
.创建
在storyboard中的模拟我们就不多说了,直接进入直接代码的编写。(模拟微博的tabBarController进行编写)
我们选择在ApplicationDelegate中的 applicationDidFinishLaunching:方法中进行创建,因为前面已经说到了UITabBarController作为整个程序的rootViewController,并且要在显示程序的windows之前创建好。具体的创建步骤:
(1)初始化UITabBarController
(2)设置UIWindow的rootViewController为UITabBarController
(3)创建相应的子控制器(viewcontroller)
(4)把子控制器添加到UITabBarController
eg://创建TabBarControllor
CustomTabBarController *tabBarController = [[CustomTabBarController alloc] init];
tabBarController.tabBar.tintColor = [UIColor orangeColor];
//设置窗口的根视图控制器
self.window.rootViewController = tabBarController;
//创建tabBar上管理的每个界面
//1.创建主页
HomeViewController *homeVC = [[HomeViewController alloc] init];
homeVC.view.backgroundColor = [UIColor whiteColor];
。。。。。。
//将创建的homeVC添加到tabBarController上
tabBarController.viewControllers = @[homeVC, msgVC, discoverVC, profileVC]; //viewControllers实际上就是一个数组,只需要把想传进去的viewController放进这个数组就可以了
注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是第一个添加的控制器对应的View。
实际效果:
![](http://images2015.cnblogs.com/blog/848976/201601/848976-20160121161844781-2045692345.png)
.UITabBar
下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton作为子控件与之对应。
![](http://images2015.cnblogs.com/blog/848976/201601/848976-20160121163016250-1676697062.png)
(P.S.系统中没有放出UITabBarButton这个类,但是我们可以用『NSClassFromString(@"UITabBarButton"』)
这里值得一提的是:UITabBarButton在UITabBar中得位置是均分的,UITabBar的默认高度为49,并且没有办法更改。
.UITabBarItem
UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置viewcontroller.tabBarItem属性来改变tabbar上对应的tab显示内容。否则系统将会根据viewController的title自动创建一个,该tabBarItem只显示文字,没有图像。
eg:homeVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"主页" image:[UIImage imageNamed:@"tabbar_home"] selectedImage:[[UIImage imageNamed:@"tabbar_home_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
.在UITabBar中间添加一个btn
这个方法会在以下的情况下自动调用,如果想要手动调用的话应该调用『layoutIfNeeded』:
.一个视图A被添加到另外一个视图B
.一个视图的frame改变
.创建
在storyboard中的模拟我们就不多说了,直接进入直接代码的编写。(模拟微博的tabBarController进行编写)
我们选择在ApplicationDelegate中的 applicationDidFinishLaunching:方法中进行创建,因为前面已经说到了UITabBarController作为整个程序的rootViewController,并且要在显示程序的windows之前创建好。具体的创建步骤:
(1)初始化UITabBarController
(2)设置UIWindow的rootViewController为UITabBarController
(3)创建相应的子控制器(viewcontroller)
(4)把子控制器添加到UITabBarController
eg://创建TabBarControllor
CustomTabBarController *tabBarController = [[CustomTabBarController alloc] init];
tabBarController.tabBar.tintColor = [UIColor orangeColor];
//设置窗口的根视图控制器
self.window.rootViewController = tabBarController;
//创建tabBar上管理的每个界面
//1.创建主页
HomeViewController *homeVC = [[HomeViewController alloc] init];
homeVC.view.backgroundColor = [UIColor whiteColor];
。。。。。。
//将创建的homeVC添加到tabBarController上
tabBarController.viewControllers = @[homeVC, msgVC, discoverVC, profileVC]; //viewControllers实际上就是一个数组,只需要把想传进去的viewController放进这个数组就可以了
注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是第一个添加的控制器对应的View。
实际效果:
![](http://images2015.cnblogs.com/blog/848976/201601/848976-20160121161844781-2045692345.png)
.UITabBar
下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton作为子控件与之对应。
![](http://images2015.cnblogs.com/blog/848976/201601/848976-20160121163016250-1676697062.png)
(P.S.系统中没有放出UITabBarButton这个类,但是我们可以用『NSClassFromString(@"UITabBarButton"』)
这里值得一提的是:UITabBarButton在UITabBar中得位置是均分的,UITabBar的默认高度为49,并且没有办法更改。
.UITabBarItem
UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置viewcontroller.tabBarItem属性来改变tabbar上对应的tab显示内容。否则系统将会根据viewController的title自动创建一个,该tabBarItem只显示文字,没有图像。
eg:homeVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"主页" image:[UIImage imageNamed:@"tabbar_home"] selectedImage:[[UIImage imageNamed:@"tabbar_home_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
.在UITabBar中间添加一个btn
这个方法会在以下的情况下自动调用,如果想要手动调用的话应该调用『layoutIfNeeded』:
.一个视图A被添加到另外一个视图B
.一个视图的frame改变
- (void)layoutSubviews{ [super layoutSubviews]; CGFloat avgWidth = self.frame.size.width / 5; NSInteger index = 0; for (UIView *item in self.subviews) { if ([item isKindOfClass:NSClassFromString(@"UITabBarButton")]) { item.frame = CGRectMake(index * avgWidth, item.frame.origin.y, avgWidth, item.frame.size.height); index++; if (index == 2) { _addBtn.frame = CGRectMake(index * avgWidth, 3, avgWidth, 44); [self addSubview:_addBtn]; index++; } } } }
相关文章推荐
- Easyui的Dialog的toolbar的自定义添加
- NSURLRequestCachePolicy 缓存策略
- UI课程(复习之前知识)
- There is already a statement named maxAmountLimit.queryList in this SqlMap
- UITabbBar的使用及属性
- UIImagePickerController拍照与摄像
- require CORE_ROOT.'fore/'.$file.'.php'; 后echo 'abc';die;无法显示'abc'
- file not found: /Users/***/Library/Developer/Xcode/DerivedData/***-febavuacartc/Build/Products/Debug
- [原创]浅谈Web UI自动化测试
- 设计模式之建造者模式(Builder)以及构建器
- NGUI 圆形 裁剪
- UITabBarController+微博简单模拟1
- CodeForces 163A Substring and Subsequence dp
- 【UEditor】 UEditor整合项目上传资源到阿里云服务器
- 蓝牙学习之旅——专业术语简述
- UIAlertController的使用(ios9.0后代替UIAlertView与UIActionSheet)
- easyui-searchbox
- 杭电hdu 5147 Sequence II (树状数组)
- UItoolBar 设置背景颜色
- java操作数据库增删改查的小工具1--TxQueryRunner