美文网首页iOS实用功能
iOS-CJJRouter 一句代码跳转任意控制器(runtim

iOS-CJJRouter 一句代码跳转任意控制器(runtim

作者: JimmyCJJ | 来源:发表于2020-05-27 11:22 被阅读0次

    当你的才华撑不起你的野心时,你就应该静下来学习。 —— CJJ

    • 平时写代码时想要跳转另一个控制器一般都需要做两步操作

    第一步

    #import "UIViewcontroller.h"
    

    第二步

    UIViewcontroller *vc = [[UIViewcontroller alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
    
    • 这样看起来好像也没有多大问题,可是项目一大的时候,就很难受了,各种.h导入,各种耦合,最后使得项目模块难以复用
    • 为了解决这个问题,我也查了很多资料,看过业内很多的组件化相关的方法,最后找到一个对中小型项目比较便捷的方法,大型项目可参考蘑菇街的MGJRouter
      和casa大神的CTMediator
      ,然后借鉴MTRouter的思路,我自己也封装了一个比较便捷的路由库CJJRouter

    CJJRouter

    CJJRouter实现了一句代码跳转任意控制器(可正反传参),不需要再引用头文件,减少耦合和依赖,觉得好用的话给个star哦

    github地址

    https://github.com/JimmyCJJ/CJJRouter

    文件结构

    文件结构

    How To Use CJJRouter?

    • 手动管理
    下载demo,直接把demo里的文件夹CJJRouter拖进工程即可
    
    • CocoaPods管理
    pod 'CJJRouter'
    

    CJJRouter Introduction

    CJJRouter是一个单例类,导入到.pch文件中即可全局使用,对项目无侵害

    #import <CJJRouter.h>
    

    Demo Introduction

    Demo Introduction

    一句话跳转(不带参数)

    [self.navigationController pushViewController:CJJRouterCreatVC(@"ViewControllerOne") animated:YES];
    

    一句话跳转(带参数,固定普通方法)

    [self.navigationController pushViewController:CJJRouterCreatNormalParamsVC(@"ViewControllerTwo", @{@"name":@"我是一个带参数的控制器(Fix NormalMethod)"}) animated:YES];
    

    一句话跳转(带参数,固定初始化方法)

    [self.navigationController pushViewController:CJJRouterCreatInitParamsVC(@"ViewControllerThree", @{@"name":@"我是一个带参数的控制器(Fix InitMethod)"}) animated:YES];
    

    一句话跳转(带参数,自定义普通方法)

    [self.navigationController pushViewController:CJJRouterCreatParamsVC(@"ViewControllerFour", @{@"name":@"我是一个带参数的控制器(Custom NormalMethod)"}, @"receiveWithCustomParams:", NO) animated:YES];
    

    一句话跳转(带参数,自定义初始化方法)

    [self.navigationController pushViewController:CJJRouterCreatParamsVC(@"ViewControllerFive", @{@"name":@"我是一个带参数的控制器(Custom InitMethod)"}, @"initWithCustomParams:", YES) animated:YES];
    

    拓展

    • 可配合UIViewController的分类使用,可在本地建立所有控制器的索引或者标识(与后台协商好),然后在分类.h文件暴露跳转接口,这样就可以在访问不同模块时直接通过该分类(中转)跳转。
    • 以下是UIViewController分类的.h文件示例
    NS_ASSUME_NONNULL_BEGIN
    
    @class WEMALLSkipToVCModel;
    @interface UIViewController (SkipToVC)
    
    /// 跳转相关VC,传任意模型
    /// @param model 任意模型
    - (void)skipToVCWithModel:(id)model;
    
    @property (nonatomic,strong) WEMALLSkipToVCModel *skipToVCModel;
    
    @end
    
    @interface WEMALLSkipToVCModel : NSObject
    @property (nonatomic,copy) NSString *type;
    @property (nonatomic,copy) NSString *linkurl;
    @property (nonatomic,copy) NSString *types;
    @property (nonatomic,copy) NSString *goods_id;
    @end
    
    NS_ASSUME_NONNULL_END
    
    • 比如分类为中转人A,有B、C、D三个模块

    • B想跳C,那么B直接调用分类的跳转方法就可以了,不需要再引用C,分类文件也不需要引用C,直接使用CJJRouter跳转,真正实现无耦合通信

    • 那么开发效率就高很多啦,从此再也不需要加班了(不加班是不可能的哈哈)

    相关文章

      网友评论

        本文标题:iOS-CJJRouter 一句代码跳转任意控制器(runtim

        本文链接:https://www.haomeiwen.com/subject/ehhyahtx.html