iOS 自定义选项卡控件(TabBar)的制作思路

来源:互联网 发布:盘古网络真的双休么 编辑:程序博客网 时间:2024/05/26 12:03

其实 一般我在博客 针对控件这一块来说,是很少进行解说.

不过主要 TabBar 相对于其他控件的重要性要多得多,制作方面也要复杂一些.

为此,我专门写一篇教程,记录一下原理和思路.以供各路神仙参考!


OK,进入正文:

iOS 5以后 其实制作这类控件简单多了,  不需要自己去组织各个View 之间的切换.

第一点,原理:

TabBar它讲白了 也是View,只是在一个View上面暂时只显示一个View 根据用户选按决定显示哪个View

iOS5以后提供在ViewController内部直接填装其他子ViewController,代码如下:

[self addChildViewController:viewController];
这样写的好处是什么,为什么iOS5以后要这样添加呢? 参考下文,你就知道为什么:

http://blog.devtang.com/blog/2012/02/06/new-methods-in-uiviewcontroller-of-ios5/






那么针对系统下的UITabBarViewController 如何进行自定义呢?

默认的TabBarView高度是49 这里注意,不要尝试去修改这个高度以来展现更多的容器视图,总之这样怎么弄都弄不到你想要的效果.

原理方面是 将UITabBar 隐藏.  那么在 添加一个 自定义的UIView 到 UITabBarViewControllerView上面

这样这个UIView 就随便你什么开发了.

另外值得一提的是,当你Push到下一个视图时,你想隐藏你自己自定义的视图. 此时纠结了.

那么在我自己经过无数次尝试以后,得带以下代码,配合系统默认的 hidesBottomBarWhenPushed  也算是实现了.

原理则是,默认addSubView 到 根视图中,当要切换Push到新的视图的时候.再把自定义视图 addSubView到TabBarView上面. 连带着一起过去.


一:声明这个变量在第一次加载界面时不会有错乱的动画出现

@interface FESBHomeViewController (){    BOOL _isFirstShowCoopTabBar;}

二:在TabBarViewController 执行ViewDidLoad时  显示出自定义选项卡视图

- (void)viewDidLoad{    [super viewDidLoad];    _isFirstShowCoopTabBar = YES;    [self isHiddenTabBar:NO withViewController:nil];}

三:核心切换自定义选项卡视图的代码

- (void)isHiddenTabBar:(BOOL)hidden withViewController:(UIViewController *)viewController{    if (!self.tabBar.hidden == hidden) {        return;    }    [coopTabBarView removeFromSuperview];    if (hidden) {        [self.tabBar setHidden:NO];        [coopTabBarView setFrame:self.tabBar.bounds];        [self.tabBar addSubview:coopTabBarView];        if (viewController != nil) {            viewController.hidesBottomBarWhenPushed = YES;        }    }else    {        [self.tabBar setHidden:YES];        [coopTabBarView setFrame:self.tabBar.frame];        int statusBarHeight = 0;        if (_isFirstShowCoopTabBar) {            _isFirstShowCoopTabBar = NO;            statusBarHeight = 20;        }        if (self.navigationController.viewControllers == nil) {            coopTabBarView.Help_top -=statusBarHeight;        }else        {            coopTabBarView.Help_top -=statusBarHeight+44;        }        [self.view addSubview:coopTabBarView];    }}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 睫角守宫断尾怎么办 定金发票弄丢了怎么办 xp电脑显示输入不支持怎么办 月子见风怎么办暴雪将 老氏电视机出现雪花点怎么办 飞利浦电视显示雪花片怎么办 电视无信号出雪花怎么办 电视打开都是雪花没有电视台怎么办 电视视频1无信号怎么办 新买的电视无信号怎么办 卫星有信号没有视频怎么办 户户通没有信号怎么办视频 雪花泥粘衣服上怎么办 遗产按份额处分判决后怎么办 宝马后驱车下雪天怎么办 宝马后驱车路滑怎么办 车子陷入泥地里怎么办 深圳居住证签注过期了怎么办 手机不能播放视频乱码了怎么办 被加密的视频无法观看怎么办 苹果5忘记id密码怎么办 七个月宝宝脾胃不好怎么办 八个月宝宝脾虚怎么办 七个月宝宝脾胃虚怎么办 海岛奇兵点错了怎么办 螳螂的脚断了怎么办 海岛奇兵打不过玩家怎么办 海岛奇兵资源满了怎么办 海岛奇兵杯越来越多打不玩家怎么办 海岛奇兵控杯技巧 杯数太高怎么办 海岛奇兵发现求救信号怎么办 海岛奇兵被打了怎么办 小鱼翅卡喉咙了怎么办 鱼翅卡在喉咙里怎么办 斗鱼身份证被使用怎么办 做的鱼丸太腥了怎么办 做鱼丸太稀了怎么办 斗鱼手机号换了怎么办 斗鱼直播掉帧怎么办 手机一直卡顿点不动怎么办呢 斗鱼直播分值底怎么办