屏幕快照 2016-10-19 10.43.49.png
需求目的
見上圖,在設(shè)計(jì)tabBar中間這種類似"發(fā)布"功能的按鈕,需要它點(diǎn)擊時(shí)候有高亮效果,但是tabBarButton無法設(shè)置它的高亮狀態(tài).
tabBarButton顯示什么內(nèi)容是由它的控制器的一個(gè)叫tabBarItem的屬性來決定的.
用UIButton來覆蓋tabBarButton時(shí)候會出現(xiàn)一個(gè)BUG: 點(diǎn)擊時(shí)候UIButton沒有反應(yīng),反而tabBarButton有反應(yīng).
產(chǎn)生原因:
系統(tǒng)默認(rèn)tabBarButton是在viewWillAppear方法里面的super方法時(shí)候添加的,
而UIButton我們一般是在viewDidLoad方法里面添加,
viewWillAppear方法是在viewDidLoad之后才調(diào)用的,
所以tabBarButton會覆蓋在UIButton上面,所以tabBarButton就響應(yīng)點(diǎn)擊事件了
解決辦法:
1.把當(dāng)前tabBarItem的enabled屬性設(shè)置為NO(簡單粗暴)
nc2.tabBarItem.enabled = NO
2.把添加UIButton的代碼寫在viewWillAppear方法里面的super方法下面.
實(shí)現(xiàn)代碼
先在tabBarController中創(chuàng)建一個(gè)控制器(隨意,這里用UIViewController即可),加入到tabBarController中用來在tabBar中占位置,并使它對應(yīng)的tabbarItem不能響應(yīng)點(diǎn)擊
//創(chuàng)建"發(fā)布"占位控制器
UIViewController *vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor = [UIColor redColor];
[self addChildViewController:vc2];
//把tabBarController對應(yīng)的子控制器的tabBarItem屬性設(shè)置為NO
vc2.tabBarItem.enabled = NO;
在UITabBarController中提供一個(gè)方法用來創(chuàng)建按鈕
//tabBar添加"發(fā)布"的按鈕
-(void)addPublishBtn
{
//創(chuàng)建按鈕并設(shè)置按鈕的圖片及大小
UIButton *pubBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[pubBtn setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
[pubBtn setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
//注意要給按鈕設(shè)置完尺寸之后再設(shè)置它的位置,不能調(diào)換順序,不然會有錯(cuò)
[pubBtn sizeToFit];
[self.tabBar addSubview:pubBtn];
//設(shè)置按鈕的位置
pubBtn.center = CGPointMake(0.5 * self.tabBar.bounds.size.width, 0.5 * self.tabBar.bounds.size.height);
}