Tabbar中間添加按鈕图云,切換item后按鈕手勢被Tabbar覆蓋失效

項目有個功能起宽,向后臺請求數(shù)據(jù)后如果有活動會在原有的TabbarController的Tabbar中間添加一個稍微大點的按鈕,由四個Item變?yōu)槲鍌€瘫俊,因為點擊中間的按鈕根據(jù)后臺數(shù)據(jù)分為兩種情況:一種相當(dāng)于直接切換了TabbarController的index,另一種是先不切換index,在原來的ViewController上面Present出來一個半透明的蒙版鹊杖,蒙版上面有兩個Button,點擊button后再切換index.效果如下:


WechatIMG30.jpeg

所以想著將四個Item變?yōu)槲鍌€以后在中間添加一個按鈕覆蓋中間的TabBarItem,雖然功能已經(jīng)實現(xiàn)了扛芽,但是中間的按鈕并沒有完全覆蓋一個Item骂蓖,所以如果點擊到按鈕周圍還是有可能觸發(fā)被覆蓋的TabBarItem,不(鉆)能(牛)容(角)忍(尖)川尖!登下,然后在自己繼承重寫的TabbarController中設(shè)置一個屬性判斷是否是點擊自定義的button觸發(fā)的代理方法(centerBtnClicked:方法中設(shè)置了self.selectedIndex = 2,會觸發(fā)代理方法 shouldSelectedViewController:),具體實現(xiàn)代碼如下:

#import "YYFTabBarController.h"
#import "UIButton+WebCache.h"
#import "UIImageView+WebCache.h"


@interface YYFTabBarController ()<UITabBarControllerDelegate,UIGestureRecognizerDelegate>
{
    BOOL _isCenterBtnPressed;
}
@property (strong, nonatomic) UITapGestureRecognizer *tap;
@property (strong, nonatomic) UIView *centerView;

@end

@implementation YYFTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.delegate = self;
    // Do any additional setup after loading the view.
}

-(void)setShowCenterBtn:(BOOL)showCenterBtn{
    if (showCenterBtn==YES) {
        [self addCenterBtn];
    }
    _showCenterBtn = showCenterBtn;
}

//add center button
-(void)addCenterBtn{
    
    
    self.centerView = [[UIView alloc] initWithFrame:CGRectMake((self.view.frame.size.width-60)/2, -(60-49)/2.0, 60.0f, 60.0f)];
     self.centerView.backgroundColor = FANLITOU_RED_COLOR;
     self.centerView.layer.cornerRadius = 30.0f;
    UIImageView *menuLogo = [[UIImageView alloc]initWithFrame:CGRectMake(20, 15, 20, 20)];
    [menuLogo sd_setImageWithURL:[NSURL URLWithString:self.activityDic[@"menu_logo"]]];
    UILabel *menuName = [[UILabel alloc]initWithFrame:CGRectMake(0, 37, 60, 20)];
    menuName.textAlignment = NSTextAlignmentCenter;
    menuName.text = self.activityDic[@"menu_name"];
    menuName.font = [UIFont systemFontOfSize:10];
    menuName.textColor = [UIColor whiteColor];
    [ self.centerView addSubview:menuLogo];
    [ self.centerView addSubview:menuName];
    
    
   self.tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(centerBtnClicked:)];
    self.tap.delegate = self;
    //add tap gesture
    [ self.centerView addGestureRecognizer:self.tap];
    
    [self.tabBar addSubview: self.centerView];
  
}


-(void)centerBtnClicked:(UITapGestureRecognizer *)tap{
    NSLog(@"centerBtnPressed");
    if ([self.activityDic[@"menu_type"] isEqualToString:@"single"]) {
        NSLog(@"showActivity");
        //is center button pressed
        _isCenterBtnPressed = YES;
         self.selectedIndex = 2;
      
    }
   
    
}

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
    NSLog(@"clicked");
    //!!!!!!!!!!!!!!!!!!!!!!!!!!  沒有這個方法的話 切換tabbar中間按鈕點擊事件會被tabbar覆蓋
    
    [self.tabBar bringSubviewToFront:self.centerView];
    
    if (self.showCenterBtn&&(viewController == tabBarController.viewControllers[2])) {
        NSLog(@"clicked3");
        //if is center button pressed ,return yes, select index 2
        if (_isCenterBtnPressed) {
            //reset to NO
            _isCenterBtnPressed = NO;
            return YES;
        }
        return NO;
    }
    return YES;
}

@end

一個很頭疼的問題,添加過按鈕后第一次點擊中間的按鈕會觸發(fā)按鈕的事件叮喳,但是切換過index后再點擊按鈕后觸發(fā)的就是被按鈕覆蓋了的那個位置的Item的點擊事件被芳,也就是直接切換了控制器。想著應(yīng)該是手勢沖突了馍悟,然后各種百度畔濒,Google,文檔都沒有解決問題最后想了想既然第一次點擊按鈕會觸發(fā)它的點擊事件赋朦,切換過以后點擊事件就被覆蓋了篓冲,和View的層級何其相似,雖然不知道tabbar點擊做了什么處理宠哄,但是這不影響我天馬星空般的思維壹将,沒錯!就是在代理方法中添加了這一句代碼:

    [self.tabBar bringSubviewToFront:self.centerView];

然后世界都變成彩色的了……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毛嫉,一起剝皮案震驚了整個濱河市诽俯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌承粤,老刑警劉巖暴区,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辛臊,居然都是意外死亡仙粱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門彻舰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伐割,“玉大人,你說我怎么就攤上這事刃唤「粜模” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵尚胞,是天一觀的道長硬霍。 經(jīng)常有香客問我,道長笼裳,這世上最難降的妖魔是什么唯卖? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮侍咱,結(jié)果婚禮上耐床,老公的妹妹穿的比我還像新娘。我一直安慰自己楔脯,他們只是感情好撩轰,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昧廷,像睡著了一般堪嫂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上木柬,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天皆串,我揣著相機與錄音,去河邊找鬼眉枕。 笑死恶复,一個胖子當(dāng)著我的面吹牛怜森,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谤牡,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼副硅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翅萤?” 一聲冷哼從身側(cè)響起恐疲,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎套么,沒想到半個月后培己,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡胚泌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年省咨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玷室。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡茸炒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阵苇,到底是詐尸還是另有隱情壁公,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布绅项,位于F島的核電站紊册,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏快耿。R本人自食惡果不足惜囊陡,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掀亥。 院中可真熱鬧撞反,春花似錦、人聲如沸搪花。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撮竿。三九已至吮便,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幢踏,已是汗流浹背髓需。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留房蝉,地道東北人僚匆。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓微渠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咧擂。 傳聞我的和親對象是個殘疾皇子敛助,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件屋确、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,102評論 4 62
  • ##前言 >最近的項目中有需求在tabbar中間添加凸起按鈕,并且點擊時按鈕要旋轉(zhuǎn)续扔,看了仿斗魚的凸起攻臀,點擊后是pr...
    軟件iOS開發(fā)閱讀 948評論 1 1
  • 我們應(yīng)該擁有排除自相矛盾的觀點的能力,因為自相矛盾的觀點中纱昧,只能有一個是對的刨啸,不可能兩個都同時存在。生存和毀...
    李向姿閱讀 277評論 0 0
  • 這是南陽陪你的第73個實盤交易日 1.指數(shù)繼續(xù)強勢的一塌糊涂识脆,今天沒有跌停個股设联。這句話我在9.6復(fù)盤里面貌似提過。...
    南陽說閱讀 282評論 2 2
  • 1.安裝HOmebrew cmd命令:ruby -e "$(curl -fsSL https://raw.gith...
    奮斗的新手閱讀 470評論 0 0