当前位置: 首页 > 工具软件 > cheddar-ios > 使用案例 >

RDVTabBarController【iOS源码阅读】

曹鹏海
2023-12-01
源码说明

RDVTabBarController 是一个定制化的TabBarController库,可动画显示隐藏tabbar栏,可定制tabbar栏   

tarbar加载

  • 在didFinishLaunchingWithOptions中实现
  1. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];    //new UIWindow 
  2. [self setupViewControllers];            //新增RDVTabBarController,调用setViewControllers为其添加多个UITableViewController,并为其设置RDVTabBarItem
  3. [self.window setRootViewController:self.viewController];
  4. [self.window makeKeyAndVisible];    //使RDVTabBar显示到屏幕的最前端
  5. [self customizeInterface];                //自定义设置,如UINavigationBar的Appearance

隐藏tabbar

  1. [[self rdv_tabBarController] setTabBarHidden:YES animated:YES];


rdv_tabBarController的实现原理

代码中include  RDVTabBarController.h,而不需要继承或扩展 RDVTabBarController再使用,因为直接通过 rdv_tabBarController就可以访问到,因为:

  1. - (void)rdv_setTabBarController:(RDVTabBarController *)tabBarController {
  2. objc_setAssociatedObject(self, @selector(rdv_tabBarController), tabBarController, OBJC_ASSOCIATION_ASSIGN);
  3. }
  1. - (void)setViewControllers:(NSArray *)viewControllers {
  2.     。。。
  3.     for (UIViewController *viewController in viewControllers) {
  4.         [viewController rdv_setTabBarController:self];    //将自己RDVTabBarController分表关联到每个UITableViewController
  5. 。。。
tabbar和tabView的关联,关联直接以每个tabView实际函数为关联Key;
objc_setAssociatedObject(源对象,关键字,关联的对象和一个关联策略)

  1. - (RDVTabBarController *)rdv_tabBarController {
  2.     RDVTabBarController *tabBarController = objc_getAssociatedObject(self, @selector(rdv_tabBarController));
  3. 。。。
所以在每个UITableViewController中rdv_tabBarController就访问到tabbar

rdv_tabBarItem实现原理

rdv_tabBarController基础上直接访问到 tabView对应的 tabBarItem,所以 tabView中直接通过 rdv_tabBarItem访问到对应的 tabBarItem

实例代码中的切图

  1. [navigationBarAppearance setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
竖屏横屏都有,横屏导航条变宽,则自动repeat图片(切图覆盖整个frame,一般切图宽度都是1)


源码地址


 类似资料: