思路
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被原生覆盖。这一点我们观察层级时可以验证。
网友评论