前言
開發(fā)了一年的項(xiàng)目準(zhǔn)備優(yōu)化,現(xiàn)在整理下,在盡量不更換大東西的情況下修改代碼,由于項(xiàng)目之前創(chuàng)建了基類撇簿,現(xiàn)在優(yōu)化起來還是挺簡單的
操作方法
隱藏標(biāo)簽欄的正確姿勢(在導(dǎo)航欄控制器中)
/**重寫push方法,讓二級界面都沒有標(biāo)簽欄*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.viewControllers.count > 0) {
viewController.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:animated];
}
隱藏導(dǎo)航欄
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//先設(shè)置當(dāng)前控制器為代理
self.navigationController.delegate = self;
}
//執(zhí)行的代理方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
//需要隱藏導(dǎo)航欄的控制器
BOOL hidden = ![self classNameArray:@[@"MouoMeUserCenterController",@"KSPhotoBrowser",@"ChatRedPacketController",@"MerchantDetailController",@"MouoGroupDetailsController",@"MouoGroupModifyController",@"MouoLiveRoomControler",@"NearbyTimerController",@"NearbyTimeUserInfoController",@"PersonalDetailController"]];
[self.navigationController setNavigationBarHidden:hidden animated:YES];
}
//判斷當(dāng)前控制器是否是數(shù)組中的名字
- (BOOL)classNameArray:(NSArray *)array {
BOOL reslut = YES;
for (NSString *string in array) {
const char *className = [string cStringUsingEncoding:NSASCIIStringEncoding];
Class newClass = objc_getClass(className);
if ([self isKindOfClass:newClass]) {
reslut = NO;
}
}
return reslut;
}
至于隱藏導(dǎo)航欄后不能右滑返回我則是用的UIViewController+BackButtonHandler
使用它的時(shí)候也遇到過一些問題聂渊,在二級頁面右滑返回一級界面的時(shí)候若一級界面有點(diǎn)擊事件有可能觸發(fā)然后造成界面卡死,需要在一級界面加上禁止返回手勢的操作
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// 禁用返回手勢
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
總結(jié)
為什么不用第三方的呢四瘫,確實(shí)歧沪,我在網(wǎng)上也看到很多別人寫的代碼很不錯(cuò),但若用在我的項(xiàng)目中就會(huì)改很多東西
比如RTRootNavigationController莲组,SmoothNavDemo,JTNavigationController都是很不錯(cuò)的框架暖夭,但在用他們的時(shí)候最好在項(xiàng)目開始的時(shí)候就使用锹杈,不然后面就只能參考下然后根據(jù)自己的實(shí)際情況使用