创建基类ViewController集成重复代码
项目中在VIewController中我们经常要写一些重复的代码, 比如设置导航条的标题内容及样式, 向导航栏添加返回按钮等等这些重复操作. 然后我就想到既然这些逻辑所有控制器基本都要实现, 那么为什么不把代码抽取到公共的基类, 然后创建的控制器都继承这个公共基类, 这样就可以使得ViewController变得更加整洁.
- (instancetype)init{
if (self=[super init]) {
[self setDefultBackBtn];
}
return self;
}
- (void)setDefultBackBtn {
[self backItemWithImage:@"icon_back" highlight:@"icon_back" title:nil];
}
- (void)backItemWithImage:(NSString *)normalImageName
highlight:(NSString *)highlighImageName
title:(NSString *)title {
UIButton * leftBtn=[UIButton buttonWithType:UIButtonTypeCustom];
if (normalImageName) {
[leftBtn setImage:[UIImage imageNamed:normalImageName] forState:UIControlStateNormal];
}
if (highlighImageName) {
[leftBtn setImage:[UIImage imageNamed:highlighImageName] forState:UIControlStateHighlighted];
}
if (title) {
leftBtn.titleLabel.font=[UIFont systemFontOfSize:18.0f];
[leftBtn setTitle:title forState:UIControlStateNormal];
[leftBtn setTitle:title forState:UIControlStateHighlighted];
[leftBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[leftBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
}else {
leftBtn.titleLabel.font=[UIFont systemFontOfSize:18.0f];
[leftBtn setTitle:@" " forState:UIControlStateNormal];
[leftBtn setTitle:@" " forState:UIControlStateHighlighted];
[leftBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[leftBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
}
[leftBtn addTarget:self action:@selector(backToLastVC) forControlEvents:UIControlEventTouchUpInside];
[leftBtn sizeToFit];
self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithCustomView:leftBtn];
}
首先 用init方法时, 就将返回按钮设置到导航栏上, 并且设置一些默认按钮样式以及点击按钮响应的方法, 这样当我们创建一个继承基类控制器的子类控制器时就会默认设置好返回按钮了. 大多数页面都是具有返回按钮的, 但是有时候按钮有些特殊需求或者根本不需要返回按钮. 那么我们只需要在基类中提供一些其他接口就可以适应这些需求.
//调用此方法不使用默认的返回按钮
- (instancetype)initWithDefaultBackBtn:(BOOL)isNeed {
if (self=[super init]) {
if (isNeed){
[self setDefultBackBtn];
}
}
return self;
}
//然后调用此方法设置自定义的返回按钮.
- (void)backItemWithImage:(NSString *)normalImageName
highlight:(NSString *)highlighImageName
title:(NSString *)title;
作者:skskgck
链接:https://juejin.cn/post/6931750487720984584
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。