用UIButton來覆蓋tabBarButton注意事項

屏幕快照 2016-10-19 10.43.49.png

需求目的

見上圖,在設(shè)計tabBar中間這種類似"發(fā)布"功能的按鈕,需要它點擊時候有高亮效果,但是tabBarButton無法設(shè)置它的高亮狀態(tài).

tabBarButton顯示什么內(nèi)容是由它的控制器的一個叫tabBarItem的屬性來決定的.

用UIButton來覆蓋tabBarButton時候會出現(xiàn)一個BUG: 點擊時候UIButton沒有反應(yīng),反而tabBarButton有反應(yīng).

產(chǎn)生原因:

系統(tǒng)默認(rèn)tabBarButton是在viewWillAppear方法里面的super方法時候添加的,
UIButton我們一般是在viewDidLoad方法里面添加,
viewWillAppear方法是在viewDidLoad之后才調(diào)用的,
所以tabBarButton覆蓋UIButton上面,所以tabBarButton就響應(yīng)點擊事件了

解決辦法:

1.把當(dāng)前tabBarItem的enabled屬性設(shè)置為NO(簡單粗暴)
nc2.tabBarItem.enabled = NO

2.把添加UIButton的代碼寫在viewWillAppear方法里面的super方法下面.

實現(xiàn)代碼

先在tabBarController中創(chuàng)建一個控制器(隨意,這里用UIViewController即可),加入到tabBarController中用來在tabBar中占位置,并使它對應(yīng)的tabbarItem不能響應(yīng)點擊
//創(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中提供一個方法用來創(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)換順序,不然會有錯
    [pubBtn sizeToFit];
    [self.tabBar addSubview:pubBtn];
    //設(shè)置按鈕的位置
    pubBtn.center = CGPointMake(0.5 * self.tabBar.bounds.size.width, 0.5 * self.tabBar.bounds.size.height);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0##技術(shù)點1:下面圖片被選中的圖片應(yīng)該是棕橙色,為什么是藍(lán)色??怎么做??UIViewController *v...
    IIronMan閱讀 1,544評論 1 9
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,750評論 1 14
  • { 11、核心動畫 需要簽協(xié)議,但是系統(tǒng)幫簽好 一、CABasicAnimation 1、創(chuàng)建基礎(chǔ)動畫對象 CAB...
    CYC666閱讀 1,705評論 2 4
  • 在我的朋友當(dāng)中,有一部分這樣的人:他們并不將自己歸于這世間任何一個文化,也不介意自己把哪里當(dāng)家。家鄉(xiāng)或者異鄉(xiāng),流浪...
    壬捷閱讀 246評論 0 0
  • ”東臨碣石,以觀滄海?!?“日月之行, 若出其中。 星漢燦爛,若出其里?!?一代豪雄,用他那如椽的大筆,把大海的雄...
    戀翊生閱讀 1,737評論 17 10

友情鏈接更多精彩內(nèi)容