面试题答案
一键面试- 实现标签栏选中效果的Objective-C代码
- 首先,创建一个继承自
UITabBarController
的自定义类,例如CustomTabBarController
。
#import "CustomTabBarController.h" @interface CustomTabBarController () <UITabBarControllerDelegate> @end @implementation CustomTabBarController - (void)viewDidLoad { [super viewDidLoad]; self.delegate = self; // 初始化标签栏的各个视图控制器 UIViewController *vc1 = [[UIViewController alloc] init]; vc1.title = @"Tab1"; UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:vc1]; nav1.tabBarItem.title = @"Tab1"; nav1.tabBarItem.image = [UIImage systemImageNamed:@"square"]; UIViewController *vc2 = [[UIViewController alloc] init]; vc2.title = @"Tab2"; UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:vc2]; nav2.tabBarItem.title = @"Tab2"; nav2.tabBarItem.image = [UIImage systemImageNamed:@"circle"]; self.viewControllers = @[nav1, nav2]; } - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { for (UITabBarItem *item in tabBarController.tabBar.items) { if (item == viewController.tabBarItem) { item.imageInsets = UIEdgeInsetsMake(-5, 0, 5, 0); item.titleTextAttributes = @{NSFontAttributeName : [UIFont boldSystemFontOfSize:14]}; } else { item.imageInsets = UIEdgeInsetsZero; item.titleTextAttributes = @{NSFontAttributeName : [UIFont systemFontOfSize:12]}; } } } @end
- 首先,创建一个继承自
- 关键类和方法
UITabBarController
:这是管理标签栏的主要类,用于管理多个视图控制器,并在屏幕底部显示标签栏。UITabBarItem
:每个标签栏选项对应的类,用于设置标签栏的图标、标题等属性。UIViewController
:视图控制器类,每个标签栏选项通常对应一个视图控制器。tabBarController:didSelectViewController:
:UITabBarControllerDelegate
协议中的方法,当用户点击标签栏的某个选项时会调用此方法。在这个方法中,可以根据选中的视图控制器来设置对应的UITabBarItem
的属性,如改变图标大小(通过imageInsets
)和文字加粗(通过titleTextAttributes
)。
- 管理标签栏的不同视图控制器
- 初始化视图控制器:在
CustomTabBarController
的viewDidLoad
方法中,创建并初始化每个标签栏对应的视图控制器。通常会将视图控制器包装在UINavigationController
中,以提供导航功能。例如:
UIViewController *vc1 = [[UIViewController alloc] init]; vc1.title = @"Tab1"; UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:vc1]; nav1.tabBarItem.title = @"Tab1"; nav1.tabBarItem.image = [UIImage systemImageNamed:@"square"];
- 设置视图控制器数组:通过设置
UITabBarController
的viewControllers
属性,将所有需要显示在标签栏的视图控制器(或包装它们的UINavigationController
)添加到数组中,如下:
self.viewControllers = @[nav1, nav2];
- 切换视图控制器:当用户点击标签栏的某个选项时,
UITabBarController
会自动切换到对应的视图控制器。同时,tabBarController:didSelectViewController:
方法会被调用,可以在这个方法中进行选中状态的样式调整。
- 初始化视图控制器:在