【低耦合集成TabBarController】最低只需传两个数组即可完成主流App框架搭建

前端之家收集整理的这篇文章主要介绍了【低耦合集成TabBarController】最低只需传两个数组即可完成主流App框架搭建前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Github仓库地址戳这里



导航

  1. 与其他自定义TabBarController的区别

  2. 集成后的效果

  3. 使用CYLTabBarController

    1. 第一步:使用cocoaPods导入CYLTabBarController

    2. 第二步:设置CYLTabBarController的两个数组:控制器数组和TabBar属性数组

    3. 第三步:将CYLTabBarController设置为window的RootViewController

    4. 第四步(可选):创建自定义的形状不规则加号按钮

    5. @H_301_43@
    6. 补充说明

    7. @H_301_43@

      与其他自定义TabBarController的区别

      - 特点 解释
      1 低耦合 与业务完全分离,最低只需传两个数组即可完成主流App框架搭建
      2 TabBar内均使用系统的TabbarItem ,并非UIButton或UIView 无需反复调“间距位置等”来接近系统效果
      3 自动监测是否需要添加“加号”按钮,并能自动设置位置 CYLTabBarController支持类似微信的“中规中矩”的 TabBarController 样式,并且默认就是微信这种样式,同时又支持类似“微博”或“淘宝闲鱼”这种具有不规则加号按钮的 TabBarController 。想支持这种样式,只需自定义一个加号按钮,CYLTabBarController 能检测到它的存在并自动tabBar 排序好,无需多余操作,并且也预留了一定接口来满足自定义需求。“加号”按钮的样式、frame均在自定义的类中独立实现,不会涉及tabbar相关设置。
      4 即使加号按钮超出了tabbar的区域,超出部分依然能响应点击事件 红线内的区域均能响应tabbar相关的点击事件,
      5 支持CocoaPods 容易集成

      (学习交流群:498865024)

      集成后的效果

      支持默认样式 同时也支持创建自定义的形状不规则加号按钮
      本仓库配套Demo的效果 另一个Demo 使用CYLTabBarController实现了微博Tabbar框架,效果如下

      使用CYLTabBarController

      四步完成主流App框架搭建:

      1. 第一步:使用cocoaPods导入CYLTabBarController

      2. 第二步:设置CYLTabBarController的两个数组:控制器数组和TabBar属性数组

      3. 第三步:将CYLTabBarController设置为window的RootViewController

      4. 第四步(可选):创建自定义的形状不规则加号按钮

      5. @H_301_43@

        第一步:使用cocoaPods导入CYLTabBarController

        Podfile 中如下导入:

        pod 'CYLTabBarController'

        然后使用 cocoaPods 进行安装:

        建议使用如下方式:

        # 不升级CocoaPods的spec仓库
        pod update --verbose

        第二步:设置CYLTabBarController的两个数组:控制器数组和TabBar属性数组

        - (void)setupViewControllers {
           CYLHomeViewController *firstViewController = [[CYLHomeViewController alloc] init];
           UIViewController *firstNavigationController = [[UINavigationController alloc]
                                                          initWithRootViewController:firstViewController];
           
           CYLSameFityViewController *secondViewController = [[CYLSameFityViewController alloc] init];
           UIViewController *secondNavigationController = [[UINavigationController alloc]
                                                           initWithRootViewController:secondViewController];
           
        
           CYLTabBarController *tabBarController = [[CYLTabBarController alloc] init];
           [self customizeTabBarForController:tabBarController];
           
           [tabBarController setViewControllers:@[
                                                  firstNavigationController,secondNavigationController,]];
           self.tabBarController = tabBarController;
        }
        
        /*
        *
        在`-setViewControllers:`之前设置TabBar的属性,
        *
        */
        - (void)customizeTabBarForController:(CYLTabBarController *)tabBarController {
           
           NSDictionary *dict1 = @{
                                   CYLTabBarItemTitle : @"首页",CYLTabBarItemImage : @"home_normal",CYLTabBarItemSelectedImage : @"home_highlight",};
           NSDictionary *dict2 = @{
                                   CYLTabBarItemTitle : @"同城",CYLTabBarItemImage : @"mycity_normal",CYLTabBarItemSelectedImage : @"mycity_highlight",};
        
           NSArray *tabBarItemsAttributes = @[ dict1,dict2 ];
           tabBarController.tabBarItemsAttributes = tabBarItemsAttributes;
        }

        第三步:将CYLTabBarController设置为window的RootViewController

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        /* *省略部分:   * */
           [self.window setRootViewController:self.tabBarController];
        /* *省略部分:   * */
           return YES;
        }

        第四步(可选):创建自定义的形状不规则加号按钮

        创建一个继承于 CYLPlusButton 的类,要求和步骤:

        1. 实现 CYLPlusButtonSubclassing 协议

        2. 子类将自身类型进行注册,一般可在 applicationapplicationDelegate 方法里面调用 [YourClass registerSubClass] 或者在子类的 +load 方法调用

          +(void)load {
             [super registerSubclass];
          }
        3. @H_301_43@

          协议提供了两个可选方法

          + (NSUInteger)indexOfPlusButtonInTabBar;
          + (CGFloat)multiplerInCenterY;

          作用分别是:

          + (NSUInteger)indexOfPlusButtonInTabBar;

          用来自定义加号按钮的位置,如果不实现默认居中,但是如果 tabbar 的个数是奇数则必须实现该方法,否则 CYLTabBarController 会抛出 exception 来进行提示

          + (CGFloat)multiplerInCenterY;

          方法是为了调整自定义按钮中心点Y轴方向的位置,建议在按钮超出了 tabbar 的边界时实现该方法。返回值是自定义按钮中心点Y轴方向的坐标除以 tabbar 的高度,如果不实现,会自动进行比对,预设一个较为合适的位置,如果实现了该方法,预设的逻辑将失效。

          详见Demo中的 CYLPlusButtonSubclass 类的实现。

          补充说明

          如果想更进一步的自定义 TabBar 样式可在 -application:didFinishLaunchingWithOptions: 方法中设置

          /**
          *  tabBarItem 的选中和不选中文属性、背景图片
          */
          - (void)customizeInterface {
             
             // 普通状态下的文字属性
             NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
             normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
             
             // 选中状态下的文字属性
             NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
             selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
             
             // 设置文字属性
             UITabBarItem *tabBar = [UITabBarItem appearance];
             [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
             [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateHighlighted];
             UITabBar *tabBarAppearance = [UITabBar appearance];
             [tabBarAppearance setBackgroundImage:[UIImage imageNamed:@"tabbar_background"]];
          }
          
          - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          /* *省略部分:   * */
             [self.window makeKeyAndVisible];
             [self customizeInterface];
             return YES;
          }

          (更多iOS开发干货,欢迎关注 微博@iOS程序犭袁


          Posted by 微博@iOS程序犭袁
          原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

          原文链接:https://www.f2er.com/swift/325599.html

猜你在找的Swift相关文章