2025-10-29 14:17:26 +08:00
|
|
|
|
//
|
|
|
|
|
|
// BaseNavigationController.m
|
|
|
|
|
|
// keyBoard
|
|
|
|
|
|
//
|
|
|
|
|
|
// Created by Mac on 2025/10/29.
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#import "BaseNavigationController.h"
|
|
|
|
|
|
|
|
|
|
|
|
@interface BaseNavigationController ()
|
|
|
|
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
@implementation BaseNavigationController
|
|
|
|
|
|
|
|
|
|
|
|
- (void)viewDidLoad {
|
|
|
|
|
|
[super viewDidLoad];
|
2025-11-03 19:00:47 +08:00
|
|
|
|
// 统一返回箭头样式与颜色
|
|
|
|
|
|
UIImage *backImg = [UIImage imageNamed:@"back_black_icon"];
|
|
|
|
|
|
if (backImg) {
|
|
|
|
|
|
self.navigationBar.backIndicatorImage = backImg;
|
|
|
|
|
|
self.navigationBar.backIndicatorTransitionMaskImage = backImg;
|
|
|
|
|
|
}
|
|
|
|
|
|
self.navigationBar.tintColor = [UIColor blackColor]; // 箭头/按钮的着色
|
|
|
|
|
|
|
|
|
|
|
|
if (@available(iOS 14.0, *)) {
|
|
|
|
|
|
self.navigationBar.topItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
|
|
|
|
|
|
}
|
2025-10-29 14:17:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
|
|
|
|
|
|
if (self.viewControllers.count > 0) {
|
|
|
|
|
|
viewController.hidesBottomBarWhenPushed = true;
|
2025-11-03 19:00:47 +08:00
|
|
|
|
UIViewController *prev = self.topViewController;
|
|
|
|
|
|
if (@available(iOS 14.0, *)) {
|
|
|
|
|
|
prev.navigationItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
prev.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
|
|
|
|
|
|
}
|
2025-10-29 14:17:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
[super pushViewController:viewController animated:animated];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 16:05:00 +08:00
|
|
|
|
/// Push 一个 VC,若栈中已存在相同 class 的 VC,则先移除旧的再 push 新的。
|
|
|
|
|
|
- (void)kb_pushViewControllerRemovingSameClass:(UIViewController *)viewController
|
|
|
|
|
|
animated:(BOOL)animated {
|
|
|
|
|
|
if (!viewController) { return; }
|
|
|
|
|
|
|
|
|
|
|
|
NSMutableArray<UIViewController *> *stack = self.viewControllers.mutableCopy;
|
|
|
|
|
|
// 移除同 class 的旧 VC(通常只有一个,这里按需移除第一个)
|
|
|
|
|
|
UIViewController *toRemove = nil;
|
|
|
|
|
|
for (UIViewController *vc in stack) {
|
|
|
|
|
|
if ([vc isKindOfClass:[viewController class]]) {
|
|
|
|
|
|
toRemove = vc;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (toRemove) {
|
|
|
|
|
|
[stack removeObject:toRemove];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 追加新 VC
|
|
|
|
|
|
[stack addObject:viewController];
|
|
|
|
|
|
|
|
|
|
|
|
// 对前一个 VC 做统一的返回按钮样式处理,与 pushViewController: 保持一致
|
|
|
|
|
|
if (stack.count > 1) {
|
|
|
|
|
|
viewController.hidesBottomBarWhenPushed = YES;
|
|
|
|
|
|
UIViewController *prev = stack[stack.count - 2];
|
|
|
|
|
|
if (@available(iOS 14.0, *)) {
|
|
|
|
|
|
prev.navigationItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
prev.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
|
|
|
|
|
|
style:UIBarButtonItemStylePlain
|
|
|
|
|
|
target:nil
|
|
|
|
|
|
action:nil];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[self setViewControllers:stack animated:animated];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-29 14:17:26 +08:00
|
|
|
|
@end
|