前言
- UITabBarController: 分栏视图控制器,在创建时,需要一次性的将所有 viewController 或 navigationController 添加到 UITabBarController 的 viewControllers 属性中。
- UITabBarController 一次性添加了很多个视图控制器,但是在程序的运行的时候,并不是一次性将所有视图控制器对象进行创建和显示,而是用户点击显示那个视图控制器对象,系统才会创建和显示该视图。
- 如果默认首先显示的不是 viewController1,例如是显示 viewController3,
- 系统首先创建 viewController1 和 viewController3,viewController2 和 viewController4 用户点击显示的时候才会被显示出来,无论先显示那个 viewController,viewController1 总是会被创建。
- TabBarController 最多只能显示 5 个视图,超过 5 个的都会以 more 的形式显示,点击 more,剩余的视图将会被显示。当点击 Edit 时可以改变分栏上放置的分栏项。
- TabBarController 的高度固定为 49,图片的尺寸最好为 30 * 30。
1、tabBarController 的创建
复制UITabBarController *tabBarController = [[UITabBarController alloc] init];
[self addChildViewController:tabBarController];
[self.view addSubview:tabBarController.view];
self.window.rootViewController = tabBarController;
ViewController11 *viewController1 = [[ViewController11 alloc] init];
ViewController12 *viewController2 = [[ViewController12 alloc] init];
ViewController13 *viewController3 = [[ViewController13 alloc] init];
ViewController14 *viewController4 = [[ViewController14 alloc] init];
NSArray *viewControllerArray = @[viewController1, viewController2, viewController3, viewController4];
tabBarController.viewControllers = viewControllerArray;
NSArray *titleArray = @[@"微信", @"通讯录", @"发现", @"我"];
NSArray *selectImageArray = @[@"tabbar_mainframeHL", @"tabbar_contactsHL", @"tabbar_discoverHL", @"tabbar_meHL"];
NSArray *unSelectImagArray = @[@"tabbar_mainframe", @"tabbar_contacts", @"tabbar_discover", @"tabbar_me"];
for (int i = 0; i < 4; i++) {
UITabBarItem *tabBarItem = tabBarController.tabBar.items[i];
tabBarItem = [tabBarItem initWithTitle: titleArray[i] image: [[UIImage imageNamed:unSelectImagArray[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage: [[UIImage imageNamed:selectImageArray[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
}
tabBarController.tabBar.tintColor = [UIColor greenColor];
2、tabBarController 的设置
tabBarController.selectedIndex = 1;
for (UIViewController *viewController in tabBarController.viewControllers) {
if ([viewController isKindOfClass:[ViewController14 class]]) {
tabBarController.selectedViewController = viewController;
}
}
[viewControllerArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[ViewController14 class]]) {
tabBarController.selectedViewController = obj;
}
}];
tabBarController.tabBar.tintColor = [UIColor greenColor];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor]} forState:UIControlStateSelected];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor grayColor]} forState:UIControlStateNormal];
tabBarController.tabBar.barTintColor = [UIColor blueColor];
tabBarController.tabBar.backgroundImage = [UIImage imageNamed:@"tabbarBkg.png"];
tabBarController.tabBar.shadowImage = [[UIImage alloc] init];
UITabBarItem *item0 = [tabBarController.tabBar.items objectAtIndex:0];
item0.imageInsets = UIEdgeInsetsMake(5, 0, -6, 0);
tabBarController.tabBar.translucent = NO;
tabBarController.hidesBottomBarWhenPushed = YES;
tabBarController.delegate = self;
3、UITabBarControllerDelegate 协议方法
- 需遵守协议 UITabBarControllerDelegate,并设置代理
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
return YES;
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"%li", tabBarController.selectedIndex);
}
- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers {
}
- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {
}
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)