自定義的UIView取代tabBar

<h2>引言</h2>
最近有朋友問我,類似于新浪微博的tabBar中間有個加號是怎么去做的,然后夏夏就說可以自己寫個UIView取代原來的tabBar,或者中間放個Button遮蓋住原來的tabBarItem。夏夏以前做過的項目中只是單純的用Button去遮蓋原來的tabBarItem,于是就研究了下用UIView取代tabBar。
</br>
<h2>首先</h2>
夏夏構(gòu)造了一個UIView,把原來的tabBbar隱藏了。因為是研究用的 ,所以比較吃藕~ 這不是重點!

0AC4337B-7ECD-4309-85BA-5B7223A86F1E.png

中間頁就是可以自定義的按鈕,無論你想做成什么效果。
</br>
<h2>Then</h2>
需要設(shè)置Button的點擊事件,夏夏用了一個curentViewController記住當(dāng)前的VIewcontroller。
- (void)tabbarButtonItem:(UIButton *)sender{
UIViewController *viewC = _vcArray[sender.tag];
if (_curentChildView != viewC) {
[self setSelectedViewController:viewC];
curentChildView = viewC;
}
}
Ok,效果出來了。
測試web.gif

我知道你們想吐槽.....這個╮(╯
╰)╭ 暫時只是測試,所以沒有好好弄界面。。。
朋友會問了,可是隱藏怎么辦,比較不能使用hiddenWhenPush這個方法了!于是捏,夏夏重寫了NavigationController里的pushpop方法。一言不合上代碼~

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    [super pushViewController:viewController animated:animated];
    [self performSelectorOnMainThread:@selector(changes:) withObject:viewController waitUntilDone:NO];
}
- (void)changes:(UIViewController *)viewController{
    if ([self.viewControllers indexOfObject:viewController] ==0) {
        [SInaTabrViewController   shareTabBarViewController].tabBarView.alpha = 1;
    }else{
        [SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 0;
    }
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated{
    [super popViewControllerAnimated:animated];
    UIViewController *viewController = [self.viewControllers lastObject];
    if (self.viewControllers.count == 1) {
        [SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 1;
    }else{
        [SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 0;
    }
    return viewController;
}

于是呢,就可以很愉快的push和pop了~

測試web.gif

結(jié)束語

夏夏在重寫push的時候,直接把<code> if ([self.viewControllers indexOfObject:viewController] ==0) {
[SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 1;
}else{
[SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 0;
}</code>
寫在push函數(shù)里就不能實現(xiàn)效果,必須用perform放到最后執(zhí)行才可以,不知道為啥。有待研究~

最后編輯于
?著作權(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)容

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