需求目的
见上图,在设计tabBar中间这种类似"发布"功能的按钮,需要它点击时候有高亮效果,但是tabBarButton无法设置它的高亮状态.
tabBarButton显示什么内容是由它的控制器的一个叫tabBarItem的属性来决定的.
用UIButton来覆盖tabBarButton时候会出现一个BUG: 点击时候UIButton没有反应,反而tabBarButton有反应.
产生原因:
系统默认tabBarButton是在viewWillAppear方法里面的super方法时候添加的,
而UIButton我们一般是在viewDidLoad方法里面添加,
viewWillAppear方法是在viewDidLoad之后才调用的,
所以tabBarButton会覆盖在UIButton上面,所以tabBarButton就响应点击事件了
解决办法:
1.把当前tabBarItem的enabled属性设置为NO(简单粗暴)
nc2.tabBarItem.enabled = NO
2.把添加UIButton的代码写在viewWillAppear方法里面的super方法下面.
实现代码
先在tabBarController中创建一个控制器(随意,这里用UIViewController即可),加入到tabBarController中用来在tabBar中占位置,并使它对应的tabbarItem不能响应点击
//创建"发布"占位控制器
UIViewController *vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor = [UIColor redColor];
[self addChildViewController:vc2];
//把tabBarController对应的子控制器的tabBarItem属性设置为NO
vc2.tabBarItem.enabled = NO;
在UITabBarController中提供一个方法用来创建按钮
//tabBar添加"发布"的按钮
-(void)addPublishBtn
{
//创建按钮并设置按钮的图片及大小
UIButton *pubBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[pubBtn setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
[pubBtn setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
//注意要给按钮设置完尺寸之后再设置它的位置,不能调换顺序,不然会有错
[pubBtn sizeToFit];
[self.tabBar addSubview:pubBtn];
//设置按钮的位置
pubBtn.center = CGPointMake(0.5 * self.tabBar.bounds.size.width, 0.5 * self.tabBar.bounds.size.height);
}