Files
keyboard/keyBoard/Class/Base/VC/BaseTabBarController.m

186 lines
6.0 KiB
Mathematica
Raw Normal View History

2025-10-29 14:17:26 +08:00
//
// BaseTabBarController.m
// keyBoard
//
// Created by Mac on 2025/10/29.
//
#import "BaseTabBarController.h"
2025-11-06 16:05:28 +08:00
#import "HomeMainVC.h"
#import "KBAiMainVC.h"
2026-01-16 21:37:18 +08:00
#import "KBShopVC.h"
#import "MyVC.h"
2026-01-26 16:53:41 +08:00
#import "KBAIHomeVC.h"
2026-01-16 21:37:18 +08:00
// #import "KBCommunityVC.h"
2025-11-06 19:19:12 +08:00
2025-10-29 14:28:57 +08:00
#import "BaseNavigationController.h"
#import "KBAuthManager.h"
2026-01-19 19:14:20 +08:00
#import "KBCustomTabBar.h"
#import "Masonry.h"
@interface BaseTabBarController () <KBCustomTabBarDelegate>
2025-10-29 14:17:26 +08:00
2026-01-19 19:14:20 +08:00
/// TabBar
@property(nonatomic, strong) KBCustomTabBar *customTabBar;
2026-01-16 21:37:18 +08:00
2025-10-29 14:17:26 +08:00
@end
@implementation BaseTabBarController
- (void)viewDidLoad {
2026-01-16 21:37:18 +08:00
[super viewDidLoad];
2025-11-06 16:57:28 +08:00
2026-01-16 21:37:18 +08:00
self.delegate = self;
2025-12-03 15:19:03 +08:00
2026-01-16 21:37:18 +08:00
// 4 Tab / / /
// Assets.xcassets/Tabbar tab_home/tab_home_selected
2026-01-16 21:37:18 +08:00
//
HomeMainVC *home = [[HomeMainVC alloc] init];
BaseNavigationController *navHome =
[[BaseNavigationController alloc] initWithRootViewController:home];
navHome.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Home")
image:@"tab_home"
selectedImg:@"tab_home_selected"];
2026-01-16 21:37:18 +08:00
//
KBShopVC *shop = [[KBShopVC alloc] init];
BaseNavigationController *navShop =
[[BaseNavigationController alloc] initWithRootViewController:shop];
navShop.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Shop")
image:@"tab_shop"
selectedImg:@"tab_shop_selected"];
2025-10-29 14:28:57 +08:00
2026-01-16 21:37:18 +08:00
// AI
2026-01-26 16:53:41 +08:00
KBAIHomeVC *aiMainVC = [[KBAIHomeVC alloc] init];
2026-01-16 21:37:18 +08:00
// community.title = KBLocalized(@"Circle");
BaseNavigationController *navCommunity =
[[BaseNavigationController alloc] initWithRootViewController:aiMainVC];
navCommunity.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Circle")
image:@"tab_shequ"
selectedImg:@"tab_shequ_selected"];
2026-01-16 21:37:18 +08:00
//
MyVC *my = [[MyVC alloc] init];
BaseNavigationController *navMy =
[[BaseNavigationController alloc] initWithRootViewController:my];
navMy.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Mine")
image:@"tab_my"
selectedImg:@"tab_my_selected"];
2026-01-19 19:14:20 +08:00
self.viewControllers = @[ navHome, navShop, navCommunity, navMy ];
// TabBar TabBar
[self setupCustomTabBarOnNativeTabBar];
2026-01-16 21:37:18 +08:00
// Token
// [[KBAuthManager shared] saveAccessToken:@"TEST" refreshToken:nil
// expiryDate:[NSDate dateWithTimeIntervalSinceNow:3600]
// userIdentifier:nil];
// [[KBAuthManager shared] signOut];
2025-10-29 14:17:26 +08:00
}
2026-01-19 19:14:20 +08:00
- (void)setupCustomTabBarOnNativeTabBar {
// 1. TabBar
[self hideNativeTabBarButtons];
// 2. TabBar
NSMutableArray *items = [NSMutableArray array];
for (UIViewController *vc in self.viewControllers) {
[items addObject:vc.tabBarItem];
}
self.customTabBar = [[KBCustomTabBar alloc] initWithItems:items];
self.customTabBar.delegate = self;
// 3. frame TabBar
self.customTabBar.frame = self.tabBar.bounds;
// 4. 使 autoresizingMask
self.customTabBar.autoresizingMask =
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
// 5. TabBar TabBar
[self.tabBar addSubview:self.customTabBar];
// 6. TabBar
self.tabBar.userInteractionEnabled = YES;
for (UIView *subview in self.tabBar.subviews) {
if (subview != self.customTabBar &&
![NSStringFromClass([subview class]) containsString:@"Background"]) {
subview.userInteractionEnabled = NO;
subview.hidden = YES;
}
}
// 7. 0
[self.customTabBar setTransparentBackground:NO];
}
- (void)hideNativeTabBarButtons {
// TabBar
for (UIView *subview in self.tabBar.subviews) {
// _UIBarBackground
if (![NSStringFromClass([subview class]) containsString:@"Background"] &&
subview != self.customTabBar) {
subview.hidden = YES;
subview.alpha = 0;
2026-01-16 21:37:18 +08:00
}
}
2025-11-06 16:57:28 +08:00
}
2026-01-19 19:14:20 +08:00
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//
[self hideNativeTabBarButtons];
}
// TabBarItem Tint
2026-01-16 21:37:18 +08:00
- (UITabBarItem *)tabItemWithTitle:(NSString *)title
image:(NSString *)imageName
selectedImg:(NSString *)selectedName {
UIImage *img = [[UIImage imageNamed:imageName]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *sel = [[UIImage imageNamed:selectedName]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:title
image:img
selectedImage:sel];
return item;
}
2026-01-19 19:14:20 +08:00
#pragma mark - KBCustomTabBarDelegate
2025-12-03 15:19:03 +08:00
2026-01-19 19:14:20 +08:00
- (void)customTabBar:(KBCustomTabBar *)tabBar
didSelectItemAtIndex:(NSInteger)index {
//
2026-01-16 21:37:18 +08:00
if ((index == 1 || index == 2) && ![KBUserSessionManager shared].isLoggedIn) {
[[KBUserSessionManager shared] goLoginVC];
2026-01-19 19:14:20 +08:00
return;
2026-01-16 21:37:18 +08:00
}
2025-12-03 15:19:03 +08:00
2026-01-19 19:14:20 +08:00
// VC
self.selectedIndex = index;
2026-01-16 21:37:18 +08:00
2026-01-19 19:14:20 +08:00
// TabBar 2 KBAiMainVC
2026-01-16 21:37:18 +08:00
if (index == 2) {
2026-01-19 19:14:20 +08:00
[self.customTabBar setTransparentBackground:YES];
2026-01-16 21:37:18 +08:00
} else {
2026-01-19 19:14:20 +08:00
[self.customTabBar setTransparentBackground:NO];
2026-01-16 21:37:18 +08:00
}
2025-12-03 15:19:03 +08:00
}
2025-10-29 14:17:26 +08:00
/*
#pragma mark - Navigation
2026-01-16 21:37:18 +08:00
// In a storyboard-based application, you will often want to do a little
preparation before navigation
2025-10-29 14:17:26 +08:00
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end