用UIButton来覆盖tabBarButton注意事项

用UIButton来覆盖tabBarButton注意事项_第1张图片
屏幕快照 2016-10-19 10.43.49.png

需求目的

见上图,在设计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);
}

你可能感兴趣的:(用UIButton来覆盖tabBarButton注意事项)