創(chuàng)建基類ViewController集成重復(fù)代碼
項(xiàng)目中在VIewController中我們經(jīng)常要寫一些重復(fù)的代碼, 比如設(shè)置導(dǎo)航條的標(biāo)題內(nèi)容及樣式, 向?qū)Ш綑谔砑臃祷匕粹o等等這些重復(fù)操作. 然后我就想到既然這些邏輯所有控制器基本都要實(shí)現(xiàn), 那么為什么不把代碼抽取到公共的基類, 然后創(chuàng)建的控制器都繼承這個(gè)公共基類, 這樣就可以使得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方法時(shí), 就將返回按鈕設(shè)置到導(dǎo)航欄上, 并且設(shè)置一些默認(rèn)按鈕樣式以及點(diǎn)擊按鈕響應(yīng)的方法, 這樣當(dāng)我們創(chuàng)建一個(gè)繼承基類控制器的子類控制器時(shí)就會(huì)默認(rèn)設(shè)置好返回按鈕了. 大多數(shù)頁(yè)面都是具有返回按鈕的, 但是有時(shí)候按鈕有些特殊需求或者根本不需要返回按鈕. 那么我們只需要在基類中提供一些其他接口就可以適應(yīng)這些需求.
//調(diào)用此方法不使用默認(rèn)的返回按鈕
- (instancetype)initWithDefaultBackBtn:(BOOL)isNeed {
if (self=[super init]) {
if (isNeed){
[self setDefultBackBtn];
}
}
return self;
}
//然后調(diào)用此方法設(shè)置自定義的返回按鈕.
- (void)backItemWithImage:(NSString *)normalImageName
highlight:(NSString *)highlighImageName
title:(NSString *)title;
作者:skskgck
鏈接:https://juejin.cn/post/6931750487720984584
來(lái)源:掘金
著作權(quán)歸作者所有缝裤。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)伯襟,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。