自定义UITabBarController思路及注意事项

思路

1.我们需要分析一下都要做什么事情:首先,我们需要自定义自己的按钮并替换原生,这样我们就可以在按钮上想怎么玩就怎么玩了,然后我们需要把自己的按钮点击事件和TabBarController的选择当前的子VC的事件关联在一起,最后进行调试,保证和原生效果一样;
2.那么从自定义按钮开始,这个很好定义,继承UIButton就可以了,我们可以重写下面的方法规定btn上的lable和imageview:

#pragma mark 设置lab和imageview位置
- (CGRect)imageRectForContentRect:(CGRect)contentRect {
    return CGRectMake((contentRect.size.width - 26) / 2, 6, 26, 26);
}

- (CGRect)titleRectForContentRect:(CGRect)contentRect {
    return  CGRectMake(contentRect.size.width * .15, 30, contentRect.size.width * .7, 20);
}

具体的位置可以自己调整,需要小红点之类的也可以自己扩展;
3.然后是移除原生上面的按钮,官方并没有提供这个接口,我们可以遍历TabBarController上的控件进行删除,这段关键的代码如下:

// 1 移除TabbarButton
    for (UIView *child in self.tabBar.subviews) {
        if ([child isKindOfClass:[UIControl class]]) {
            [child removeFromSuperview];
        }
    }

4.最后我们需要关联事件,即点击btn触发TabBarController选择对应的VC;
5.进行调试,确保和原生效果一样;

注意事项

不可以先移除btn添加btn然后再去设置TabBarController.viewControllers,这是因为当你去设置TabBarController.viewControllers时,内部方法会去创建自己的btn,如果把这一步放到最后会造成自定义btn被原生覆盖。这一点我们观察层级时可以验证。

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

推荐阅读更多精彩内容

  • 前言 很多时候,系统原生的 UITabBar 并不能满足我们的需求,譬如我们想要给图标做动态的改变,或者比较炫一点...
    四月_Hsu阅读 5,118评论 1 6
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • 一直以来总觉得自己思考的格局不够大,今天在朋友圈看到一个很敬佩的女企业家W发的采访文中写到:梦想每个人都有,在追梦...
    林潇Ena阅读 686评论 1 2
  • 你总会有各种烦心事,因为人类生于此世欲望太多太大。没人能做到无欲无求。所以我们才是凡人。 然而,没有希望,没有欲望...
    馨子QAQ阅读 227评论 0 1
  • launched her business开展业务 caught her eye吸引注意力 postdoc博士后学...
    FIONA_fb89阅读 157评论 0 0