免费开源的iOS开发学习平台

UITabBarController介绍:1-UITabBarController常用属性和方法

目前市面上常见的App的整体功能布局都是底部有4-5个功能菜单,点击不同的功能菜单可以切换不同的功能界面,底部的功能菜单以及功能切换都是由UITabBarController类来控制和管理的。

常见App的控制器构成

一般来说,目前市面上的App很多都是由一个UITabBarController管理着4-5个UINavigationController,然后每个UINavigationController又管理着一组UIViewController对象或者其子类对象(如:UITableViewController,UICollectionViewController等)。如我们常用的微信应用,由四个功能模块组成,分别是微信、通讯录、发现和我,这四个功能模块分别对应一个UINavigationController控制器,并且被一个UITabBarController控制器统一管理。

UITabBarController常用属性

在UITabBarController类中,有两个核心属性,分别为viewControllerstabBar,其分别管理UITabBarController所管理的子控制器以及底部菜单栏的样式。

  • viewControllers: 用于存储UITabBarController所需要管理的子控制器,通常这些子控制器是UINavigationController类的对象
@property(nullable, nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
  • tabBar: 用于定制tabBar的整体外观样式,例如:背景颜色、背景图片等,需要注意的是:tabBar上每个按钮的样式定制并不由tabBar决定,这个与导航栏navigationBar是类似的
@property(nonatomic,readonly) UITabBar *tabBar;
  • selectedViewController: 设置被选中的子控制器,被选中的子控制器会显示被选中的状态
@property(nullable, nonatomic, assign) __kindof UIViewController *selectedViewController;
  • selectedIndex:根据序号设置被选中的子控制器
@property(nonatomic) NSUInteger selectedIndex;

UIViewController类中的tabBarItem与tabBarController

与UINavigationController类似,UITabBarController类中也对UIViewController类的属性进行了扩展,增加了tabBarItem这个关键属性,因此,每个子控制器的UITabBarItem样式,其实是在子控制器对象中进行设置的,这样保证了定制的灵活性。另外,tabBarController属性使每个子控制器都可以获取到管理它的UITabBarController对象。

@interface UIViewController (UITabBarControllerItem)
@property(null_resettable, nonatomic, strong) UITabBarItem *tabBarItem; 
@property(nullable, nonatomic, readonly, strong) UITabBarController *tabBarController; 
@end