自定义的UIView取代tabBar

作者: __夏至未至 | 来源:发表于2016-06-24 11:49 被阅读605次

    <h2>引言</h2>
    最近有朋友问我,类似于新浪微博的tabBar中间有个加号是怎么去做的,然后夏夏就说可以自己写个UIView取代原来的tabBar,或者中间放个Button遮盖住原来的tabBarItem。夏夏以前做过的项目中只是单纯的用Button去遮盖原来的tabBarItem,于是就研究了下用UIView取代tabBar。
    </br>
    <h2>首先</h2>
    夏夏构造了一个UIView,把原来的tabBbar隐藏了。因为是研究用的 ,所以比较吃藕~ 这不是重点!

    0AC4337B-7ECD-4309-85BA-5B7223A86F1E.png
    中间页就是可以自定义的按钮,无论你想做成什么效果。
    </br>
    <h2>Then</h2>
    需要设置Button的点击事件,夏夏用了一个curentViewController记住当前的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

    结束语

    夏夏在重写push的时候,直接把<code> if ([self.viewControllers indexOfObject:viewController] ==0) {
    [SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 1;
    }else{
    [SInaTabrViewController shareTabBarViewController].tabBarView.alpha = 0;
    }</code>
    写在push函数里就不能实现效果,必须用perform放到最后执行才可以,不知道为啥。有待研究~

    相关文章

      网友评论

      • 不会游泳的飞鱼:demo在哪里啊
      • hY_Ramos:[self setSelectedViewController:viewC];
        您好!这个方法实现的,怎么实现类似tabbar那种切换VC
        __夏至未至:@hY_Ramos 这个是系统自己会去实现tabbar系统切换的,当然你也可以用那个childViewcontroller,然后切换childViewController。

      本文标题:自定义的UIView取代tabBar

      本文链接:https://www.haomeiwen.com/subject/puuodttx.html