一 为什么要自定义UITabBarController
- 想把UITabBarController内部的自控制器细节屏蔽起来, 不让外界了解
- 另外一个目的: 每一段代码都应该放在合适的地方
二 重复代码的抽取
- 相同的代码放到一个方法中
- 不同的东西变成参数
- 在需要用到这段代码的地方传递参数/调用方法
三 统一所有控制器导航栏左上角和右上角的内容都一样
- 让所有push进来的控制器,它导航栏左上角和右上角的内容都一样
- 拦截所有push进来的控制器
- method : 自定义导航栏 重写push方法, 就可以得到传进来的控制器参数
// 90%的”拦截"都是通过自定义类, 重写自带的方法实现的
四 90%的报错 —>duplicate symbol _OBJC_METACLASS_$_类名 in: “错误
- 90%都是因为包换了#import.m文件"
- 其他出错的话可能是 因为项目中存在了两个一样的.m文件
五 创建UIBarButtonItem的代码为什么放在UIBarButtonItem分类中最合适?
+ (UIBarButtonItem *)itemWithTarget:(id)target Action:(SEL)action WithImage:(NSString *)image WithLightImage:(NSString *)lightImage
{
UIButton *Btn = [UIButton buttonWithType:UIButtonTypeCustom];
[Btn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[Btn setBackgroundImage:[UIImage imageNamed:lightImage] forState:UIControlStateHighlighted];
Btn.size = Btn.currentBackgroundImage.size;
[Btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *item =[[UIBarButtonItem alloc] initWithCustomView:Btn];
return item;
}
- 项目中有多处地方会用到这段代码
- 每一段代码都应该放在最合适的地反: 这段代码明显是在创建一个UIBarButtonItem,所以跟UIBarButtonItem相关
- 从命名习惯和规范的角度看:[UIBarButtonItem ItemWith…] 这种形式创建item是比较规范的