RDVTabBarController【iOS源码阅读】

RDVTabBarController是一款iOS库,支持自定义TabBarController并实现动画效果。该库可通过简单配置完成tabbar的显示与隐藏,适用于需要高度定制化Tab栏的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码说明

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)


源码地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值