自定义的UIView取代tabBar

<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放到最后执行才可以,不知道为啥。有待研究~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OC开发我们主要有以下三种自定义方法,供大家参考:Push & PopModalSegue 前两种大家都很熟悉,第...
    ScaryMonsterLyn阅读 1,710评论 1 3
  • 概述 这篇文章,我将讲述几种转场动画的自定义方式,并且每种方式附上一个示例,毕竟代码才是我们的语言,这样比较容易上...
    伯恩的遗产阅读 54,183评论 37 381
  • 转自:http://www.code4app.com/blog-866962-1317.html1、设置UILab...
    MMOTE阅读 1,740评论 1 1
  • 一个app往往有很多界面,而界面之间的跳转也就是对应控制器的跳转,控制器的跳转一般有两种情况 push 或者 mo...
    Dariel阅读 15,498评论 73 186
  • 我再一次在梦中见你,你却仍然厌恶我,为什么我明明没有错,为什么难过的总是我,我自己已经开始厌恶自己了
    旭阳阳阅读 184评论 0 0