UITabBarController的结构
1.创建一个UITabBarController
UITabBarController通常作为rootViewController,且不能添加到别的container viewController中。最常见的创建UITabBarController的地方就是在application delegate中的applicationDidFinishLaunching:方法中。
//1.创建一个UITabBarController对象(这个自建类继承子UITabBarController)RootViewController *tabView=[RootViewController new];//2.创建tabbarcontroller中每一个tab对应的要显示的对象UIViewController *fVC=[[UIViewController alloc]initWithNibName:nil bundle:nil];fVC.title=@"FristVC";UIViewController *sVC=[[UIViewController alloc]initWithNibName:nil bundle:nil];sVC.title=@"secondeVC";//3.以数组第形式将vc加载到viewControllers中tabView.viewControllers=[NSArray arrayWithObjects:fVC,sVC, nil];//4.加载到rootviewself.window.rootViewController=tabView;
只有当viewControllers里面所有的VC都支持该方向的旋转,当前页面才会旋转。
2.设置UITabBarItem
UITabBar上面每一个Tab都对应着一个ViewController,设置该viewcontroller的tabBarItem属性来改变tabbar上对应的tab显示内容。如没有设置,系统将会根据viewController的title自动创建一个,该tabBarItem只有文字,没有图像。当我们自己创建UITabBarItem的时候,我们可以指定显示的图像和对应的文字。
UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"AAAAAAA" image:nil tag:1];//设置2种状态的图标[item setFinishedSelectedImage:[UIImage imageNamed:@"second.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"first.png"]];//设置类似新消息提示的红圈 item.badgeValue=@"1";self.tabBarItem = item;
最多可以同时显示4个图标,过超过4个,会出现一个more的图标(具体可以看自带的ipod程序),点击这个按钮出现一个navigationViewController的导航页面,里面是table,列出所有未显示的items,右上角是一个编辑按钮,点进去可以进行所有的items排序,可以通过设置UITabBarController的customizableViewControllers属性(注意也是NSArray)指定一个子集,只有这一部分v的iewControllers是可以放到tabBar中显示的。但每当UITabBarController的viewControllers属性发生变化的时候,customizableViewControllers就会自动设置成跟viewControllers一致,即默认的所有的viewController都是可以编辑的,如果我们要始终限制只是某一部分可编辑的话,在每次viewControlles发生改变的时候,重新设置一次customizableViewControllers。
3.tab切换
a.按tabBarItem切换
b.不按tabBarItem也可以进行tab切换,有3 属性控制(注意属性可set可get)
- selectedIndex属性(NSInteger)唯一问题是more没办法选中,get的话返回NSNotFound,超出序列会忽略。
- selectedViewController属性(UIViewController)
- viewControllers属性 整个都更新了,当然当前vc也会变化,会先找最后一次的vc是否存在,没有,按最后一次的index,如果也没有,就显示新序列里面的。
4.UITabBarControllerDelegate
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;
该方法用于控制TabBarItem能不能选中,返回NO,将禁止用户点击某一个TabBarItem被选中。但是程序内部还是可以通过直接setSelectedIndex选中该TabBarItem。
- (void)tabBarController:UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers;- (void)tabBarController:UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed;- (void)tabBarController:UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed;
这三个方法主要用于监测对moreViewController中对view controller的edit操作