iOS开发基础30-UITabBarController

UITabBarController 是 iOS 中常用的用于创建 tabbar 导航界面的控制器,适用于应用的主要功能通过不同的标签页来组织的场景。本文将详细介绍 UITabBarController 的基本用法、属性和方法,并通过示例代码详细展示如何创建和使用 UITabBarController

一、UITabBarController概述

UITabBarController 是一个容器视图控制器,用于管理多个子视图控制器,并在底部显示一个标签栏(UITabBar)。用户可以通过点击标签栏中的标签来切换不同的子视图控制器。

优点

  • 简洁:通过标签栏来组织界面,界面简洁明确。
  • 用户体验:用户可以方便地在不同功能模块之间进行切换。
  • 便捷:系统自带实现,使用便捷,扩展性强。

二、UITabBarController的基本用法

创建UITabBarController

通常,可以通过代码或界面设计器(Storyboard)来创建一个 UITabBarController。接下来,我们将演示通过代码创建一个带有两个标签页的 UITabBarController

1. 初始化UITabBarController

UITabBarController 作为应用的主视图控制器:

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    // 创建 UITabBarController
    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    
    // 创建子视图控制器
    UIViewController *firstViewController = [[UIViewController alloc] init];
    firstViewController.view.backgroundColor = [UIColor whiteColor];
    firstViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"First" image:nil tag:0];
    
    UIViewController *secondViewController = [[UIViewController alloc] init];
    secondViewController.view.backgroundColor = [UIColor whiteColor];
    secondViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Second" image:nil tag:1];
    
    // 将子视图控制器添加到 UITabBarController
    tabBarController.viewControllers = @[firstViewController, secondViewController];
    
    // 设置主视图控制器为 UITabBarController
    self.window.rootViewController = tabBarController;
    [self.window makeKeyAndVisible];
    
    return YES;
}

@end

2. 设置子视图控制器属性

可以为每个子视图控制器设置标题、图标和其他属性:

firstViewController.tabBarItem.title = @"首页";
firstViewController.tabBarItem.image = [UIImage imageNamed:@"home_icon"];

secondViewController.tabBarItem.title = @"设置";
secondViewController.tabBarItem.image = [UIImage imageNamed:@"settings_icon"];

使用 UIStoryboard 创建 UITabBarController

在 Xcode 的 Interface Builder 中,将 UIViewController 替换为 UITabBarController,然后使用拖动操作将其他视图控制器添加为它的子视图控制器。

三、UITabBarController常见属性和方法

属性

  1. viewControllers:管理的子视图控制器数组。
@property (nonatomic, copy) NSArray<__kindof UIViewController *> *viewControllers;
  1. selectedViewController:当前选中的视图控制器。
@property (nonatomic, assign) UIViewController *selectedViewController;
  1. selectedIndex:当前选中视图控制器的索引。
@property (nonatomic) NSUInteger selectedIndex;
  1. tabBar:底部的标签栏,类型为 UITabBar
@property (nonatomic, readonly) UITabBar *tabBar;

方法

  1. -setViewControllers:animated::设置标签页的视图控制器。
- (void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers animated:(BOOL)animated;
  1. -tabBar:didSelectItem::当标签被选择时的回调方法。
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
  1. -moreNavigationController:如果 tabBar 中有超过5个标签,系统会自动创建更多标签页。
@property (nonatomic, readonly) UINavigationController *moreNavigationController;

四、示例代码:创建一个四标签 UITabBarController

以下代码展示了如何创建包含四个标签页的 UITabBarController,每个标签页都有各自的图标和标签名:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    
    // 第一个标签页
    UIViewController *firstViewController = [[UIViewController alloc] init];
    firstViewController.view.backgroundColor = [UIColor whiteColor];
    firstViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:[UIImage imageNamed:@"home_icon"] tag:0];
    
    // 第二个标签页
    UIViewController *secondViewController = [[UIViewController alloc] init];
    secondViewController.view.backgroundColor = [UIColor whiteColor];
    secondViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Explore" image:[UIImage imageNamed:@"explore_icon"] tag:1];
    
    // 第三个标签页
    UIViewController *thirdViewController = [[UIViewController alloc] init];
    thirdViewController.view.backgroundColor = [UIColor whiteColor];
    thirdViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Notifications" image:[UIImage imageNamed:@"notifications_icon"] tag:2];
    
    // 第四个标签页
    UIViewController *fourthViewController = [[UIViewController alloc] init];
    fourthViewController.view.backgroundColor = [UIColor whiteColor];
    fourthViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Settings" image:[UIImage imageNamed:@"settings_icon"] tag:3];
    
    // 将视图控制器添加到 tabBarController
    tabBarController.viewControllers = @[firstViewController, secondViewController, thirdViewController, fourthViewController];
    
    self.window.rootViewController = tabBarController;
    [self.window makeKeyAndVisible];
    
    return YES;
}

五、UITabBarController的原理分析

UITabBarController 通过组合多个视图控制器来实现标签导航,每个子视图控制器都对应一个 UITabBarItem。底层实现时,UITabBarController 维护一个 viewControllers 数组,存放各个子视图控制器。

切换视图控制器

当用户点击某个标签时,UITabBarController 会通过设置 selectedIndex 属性来切换到对应的视图控制器,并触发相应的视图控制器的生命周期方法,如 viewWillAppear:viewDidAppear:,确保在视图切换过程中可以进行必要的资源配置和UI更新。

事件响应

UITabBarController 通过实现 UITabBarDelegate 的方法,如 tabBar:didSelectItem:,来响应用户点击标签的事件。可以在这个回调中执行一些额外的操作,如页面统计、动画效果等。

六、总结

本文详细介绍了 UITabBarController 的基本用法、常见属性和方法,通过掌握 UITabBarController 及其相关控件,可以轻松实现多标签导航界面,为用户提供友好且一致的使用体验。这对于多数应用来说,都是不可或缺的一部分。

posted @ 2015-08-02 23:21  Mr.陳  阅读(288)  评论(0编辑  收藏  举报