1、UITabBarController的使用步骤
初始化UITabBarController
设置UIWindow的rootViewController为UITabBarController
根据具体情况,通过addChildViewController方法添加对应个数的子控制器
2、UITabBarController的子控制器
UITabBarController添加控制器的方式有2种
添加单个子控制器
- (void)addChildViewController:(UIViewController *)childController;
设置子控制器数组
@property(nonatomic,copy) NSArray *viewControllers;
3、UITabBar
如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件
如果UITabBarController有4个子控制器,那么UITabBar的结构大致如下图所示
4、UITabBarButton
二、UITabBarController
如果系统的 UITabBarButton 不能满足我们的开发 , 比如 下列这种效果:
有两种三种方法去实现它:
第一种: 在我们 给TabBarController 添加子控制器的时间 ,在 第三的位置 加入一个 UIViewController ,需要放button的位置 撑开 ,然后定义一个 属性button,
@property (nonatomic , weak) UIButton *centerButton ;
- (void)customBtn{
if ( _centerButton == nil) {
_centerButton = [[UIButton alloc]init];
}
//长度
CGFloat w = self.tabBar.bounds.size.width / self.childViewControllers.count;
CGRect rect = CGRectMake(0, 0, w, self.tabBar.bounds.size.height);
//设置frmae
_centerButton.frame = CGRectOffset(rect, 2 * w, 0);
[_centerButton setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
[_centerButton setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted];
//设置背景图片
[_centerButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal];
[_centerButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted];
//设置一个监听事件
[_centerButton addTarget:self action:@selector(clickAdd) forControlEvents:UIControlEventTouchUpInside];
[self.tabBar addSubview:_centerButton];
}
注意 custom的调用位置 :
1、- (void)viewDidLayoutSubviews
2、- (void)viewWillAppear:(BOOL)animated
第二种方式
第二种方法:
1、自定义 整个 TabBar ,利用 layoutSubviews 这个 方法去设置每一个button的 frame ,把原来 view的 self.tabBar 移除 ,替换成我们定义的tabBar
2、在创建控制器的时间 把自定义那个 button添加到TabBar上,在根据按钮的不同的tag值去实现 代理,点击切换不同控制器
- (void)addTabBarButton:(UITabBarItem *)item
{
//创建按
TSZTabBarButton *button = [TSZTabBarButton buttonWithType:UIButtonTypeCustom];
//添加
[self addSubview:button];
//设置图片
[button setBackgroundImage:item.image forState:UIControlStateNormal];
[button setBackgroundImage:item.selectedImage forState:UIControlStateSelected];
//点击添加单击时间
[button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchDown];
//默认选中第0个按钮
NSInteger count = self.subviews.count;