当你的才华撑不起你的野心时,你就应该静下来学习。 —— 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
跳转,真正实现无耦合通信 -
那么开发效率就高很多啦,从此再也不需要加班了(不加班是不可能的哈哈)
网友评论