iOS路由跳转(三)之JKRouter基础教程1
2017-03-21 08:14
881 查看
接上篇《iOS路由跳转(二)之需求分析》
这一篇文章主要对JKRouter的实现一 一说明。
JKRouter的结构如下:
RouterOptions
RouterOptions 这个类定义在了
JKouterConfig
1) URLScheme
在这里对整个app的协议定义一下,我这边的demo协议定义如下
2)modulesInfoFileName
路由配置表的json文件名字,我这边的demo里就json文件的格式如下,大家可以根据需要自己调整哦:
3)sepcialJumpListFileName
这个是保存特殊跳转操作的plist文件名,特殊跳转例如:present,带有动画效果的翻转,缩小等。里面可以约定其动画样式。我这边由于没有这样的需求,目前只提供了满足present的支持。
4)webContainerName
这个是混合开发时,提供web展示交互的容器类名,大家有的话可以配置上,我这边后续会推出一个相关的容器,感兴趣的小伙伴可以持续跟进我的博客。
5)navigationController
这个是根视图导航器哦,这个一定要设置,如果不设置的话,你会发现所有的页面根本不会跳转的哦。
先给大家简单说一下两个重要的属性:
1)modules 这个主要是讲json文件中的信息读取到内存中,被moudles持有,提高遍历的速度。
2)specialOptionsSet 这个主要是保存的特殊跳转的信息,也是提前读取到内存中,使用的时候可以提高遍历速度。
特别注意:JKRouter 初始化的时候,一定不能用
这里面的跳转方法正常跳转,没有权限等级判断的方法如下:
通过自定义URL协议进行跳转的方法有:
通过自定义URL协议进行跳转的,都可以通过路由表配置权限,动画,等配置信息,实现权限判定,特殊动画跳转等操作,另外h5交互也可以通过自定义URL跳转到我们的页面。在上面的几个方法中,大家可以看到moduleID这个字段,这里我为UIViewController写了一个category,绑定了一个属性MoudleID,这样如果有需要的话,我们可以为我们的相关页面指定moduleID来标记,方便我们通过moduleID来进行push,pop操作。
细心的朋友,可能会发现还有一个方法没有说,是的,还有一个方法如下:
这个方法,上面说的很清楚,主要是为了访问基于http,https协议的路由请求。比如展示线上的活动等等。
大家可以发现,每一个方法的详细用法我都写的很详细了,关于pop操作的,大家看看注释就一目了然了,这一块我就不多说了。
最后还有一个方法,大家要注意哦:
这个方法主要是在app内通过浏览器来打开相关的URL的,这种需求在app开发的过程中虽然不多,但也有的。
好了,今天就写到这里吧,大家想看demo源码的话可以点击JKRouter下载地址
如果想直接集成到项目中的话,可以使用
下一篇,我将为大家分享如何实现json文件解析,以及权限等级的判断处理。
这一篇文章主要对JKRouter的实现一 一说明。
JKRouter的结构如下:
JKRouter里面都有啥
兵马未动,粮草先行。先给大家简单介绍下各个类的作用。JKRouter这个类主要是定义实现了各种跳转的方法,以及一些相关配件类的声明。
RouterOptions
@interface RouterOptions : NSObject //普通的present,push 跳转方式 @property (nonatomic, readwrite) BOOL isModal; //跳转时是否有动画 @property (nonatomic, readwrite) BOOL animated; //每个页面所对应的moduleID @property (nonatomic, copy, readonly) NSString *moduleID; //当前状态下用户所具有的 access 权限 @property (nonatomic) JKAccessRight theAccessRight; //跳转时传入的参数,默认为nil @property (nonatomic,copy,readwrite) NSDictionary *defaultParams; /** 创建默认配置的options对象 @return RouterOptions 实例对象 */ + (instancetype)options; /** 创建options对象,并配置moduleID @param moduleID 模块的ID @return RouterOptions 实例对象 */ + (instancetype)optionsWithModuleID:(NSString *)moduleID; /** 创建单独配置的options对象,其余的是默认配置 @param params 跳转时传入的参数 @return RouterOptions 实例对象 */ + (instancetype)optionsWithDefaultParams:(NSDictionary *)params; /** 已经创建的option对象传入参数 @param params 跳转时传入的参数 @return RouterOptions 实例对象 */ - (instancetype)optionsWithDefaultParams:(NSDictionary *)params; @end
RouterOptions 这个类定义在了
JKRouter.h中方便大家看到,这个类的使用频率是非常的高的,主要用push/pop时携带各种配置信息,进行准确的跳转。
JKouterConfig
@interface JKouterConfig : NSObject @property (nonatomic,strong) NSString *modulesInfoFileName; // 路由配置信息的json文件名 @property (nonatomic,strong) NSString *sepcialJumpListFileName; //跳转时有特殊动画的plist文件名 @property (nonatomic,strong) NSString *webContainerName;// app中web容器的className @property (nonatomic,strong) NSString *URLScheme;//自定义的URL协议名字 @property (nonatomic,weak) UINavigationController * navigationController; //app的导航控制器 @end
JKouterConfig主要是用在JKRouter单例初始化时,执行全局配置的操作.
1) URLScheme
在这里对整个app的协议定义一下,我这边的demo协议定义如下
jkpp,感兴趣的小伙伴也可以自己定义一个哦。
2)modulesInfoFileName
路由配置表的json文件名字,我这边的demo里就json文件的格式如下,大家可以根据需要自己调整哦:
[ {"moduleID":10001, "targetVC":"JKAViewController" }, {"moduleID":10002, "targetVC":"JKBViewController" }, {"moduleID":10003, "targetVC":"JKDViewController", "accessRight":1 } ]
3)sepcialJumpListFileName
这个是保存特殊跳转操作的plist文件名,特殊跳转例如:present,带有动画效果的翻转,缩小等。里面可以约定其动画样式。我这边由于没有这样的需求,目前只提供了满足present的支持。
4)webContainerName
这个是混合开发时,提供web展示交互的容器类名,大家有的话可以配置上,我这边后续会推出一个相关的容器,感兴趣的小伙伴可以持续跟进我的博客。
5)navigationController
这个是根视图导航器哦,这个一定要设置,如果不设置的话,你会发现所有的页面根本不会跳转的哦。
JKRouter如何实现跳转
前面把相关的基础给大家做了简单的介绍,下面给大家说说最重要的,如何实现跳转。@interface JKRouter : NSObject @property (nonatomic, copy, readonly) NSSet <NSDictionary *>* modules; ///< 存储路由,moduleID信息,权限配置信息 @property (nonatomic, copy, readonly) NSSet <NSDictionary *>* specialOptionsSet; ///< 特殊跳转的页面信息的集合 /** 初始化单例 @return JKRouter 的单例对象 */ + (instancetype)router; /** 配置router信息 @param config router的配置信息 */ + (void)routerWithConfig:(JKouterConfig *)config; /** 默认打开方式 一般由native调用 @param vcClassName 跳转的控制器类名 */ + (void)open:(NSString *)vcClassName; /** 根据options的设置进行跳转 @param vcClassName 跳转的控制器类名 @param options 跳转的各种设置 */ + (void)open:(NSString *)vcClassName options:(RouterOptions *)options; /** 根据options的设置进行跳转,并执行相关的回调操作 @param vcClassName 跳转的控制器类名 @param options 跳转的各种设置 @param callback 回调 */ + (void)open:(NSString *)vcClassName options:(RouterOptions *)options CallBack:(void(^)())callback; /** 遵守用户指定协议的跳转 在外部浏览器唤醒app,H5调用相关模块时使用 适用于携带少量参数,不带参数的跳转 @param url 跳转的路由 携带参数 */ + (void)URLOpen:(NSString *)url; /** 遵守用户指定协议的跳转 适用于携带大量参数的跳转,多用于H5页面跳转到native页面 @param url 跳转的路由,不携带参数 @param params 传入的参数 */ + (void)URLOpen:(NSString *)url params:(NSDictionary *)params; /** 适用于访问基于http协议/https协议的路由跳转 @param url 跳转的路由,可以携带少量参数 */ + (void)httpOpen:(NSString *)url; /** 默认情况下的pop,或者dismiss ,animated:YES */ + (void)pop; /** 默认情况下的pop,或者dismiss,animated:YES @param animated 是否有动画 */ + (void)pop:(BOOL)animated; /** 默认情况下的pop,或者dismiss animated @param params 返回时携带的参数 @param animated 是否有动画 */ + (void)pop:(NSDictionary *)params :(BOOL)animated; /** pop到指定的页面 默认animated为YES,如果需要 dismiss,也会执行 @param vc 指定的vc对象 */ + (void)popToSpecifiedVC:(UIViewController *)vc; /** pop到指定的页面 如果需要 dismiss,也会执行 @param vc 指定的vc对象 @param animated 是否有动画 */ + (void)popToSpecifiedVC:(UIViewController *)vc animated:(BOOL)animated; /** 根据moduleID pop回指定的模块 @param moduleID 指定要返回的moduleID */ + (void)popWithSpecifiedModuleID:(NSString *)moduleID; /** 根据moduleID pop回指定的模块 并指定动画模式 @param moduleID 指定要返回的moduleID @param params 返回时携带的参数 @param animated 是否有动画 */ + (void)popWithSpecifiedModuleID:(NSString *)moduleID :(NSDictionary *)params :(BOOL)animated; /** 通过浏览器跳转到相关的url或者唤醒相关的app @param url 路由信息 */ - (void)openExternal:(NSString *)url; @end
先给大家简单说一下两个重要的属性:
1)modules 这个主要是讲json文件中的信息读取到内存中,被moudles持有,提高遍历的速度。
2)specialOptionsSet 这个主要是保存的特殊跳转的信息,也是提前读取到内存中,使用的时候可以提高遍历速度。
特别注意:JKRouter 初始化的时候,一定不能用
+ (instancetype)router;这个方法,这个方法是用来持有相关的属性,方便在别的类里面进行操作。要用
+ (void)routerWithConfig:(JKouterConfig *)config;进行初始化,并执行相关的配置操作。
这里面的跳转方法正常跳转,没有权限等级判断的方法如下:
+ (void)open:(NSString *)vcClassName; + (void)open:(NSString *)vcClassName options:(RouterOptions *)options; + (void)open:(NSString *)vcClassName options:(RouterOptions *)options CallBack:(void(^)())callback;
通过自定义URL协议进行跳转的方法有:
+ (void)URLOpen:(NSString *)url; + (void)URLOpen:(NSString *)url params:(NSDictionary *)params;
通过自定义URL协议进行跳转的,都可以通过路由表配置权限,动画,等配置信息,实现权限判定,特殊动画跳转等操作,另外h5交互也可以通过自定义URL跳转到我们的页面。在上面的几个方法中,大家可以看到moduleID这个字段,这里我为UIViewController写了一个category,绑定了一个属性MoudleID,这样如果有需要的话,我们可以为我们的相关页面指定moduleID来标记,方便我们通过moduleID来进行push,pop操作。
细心的朋友,可能会发现还有一个方法没有说,是的,还有一个方法如下:
+ (void)httpOpen:(NSString *)url;
这个方法,上面说的很清楚,主要是为了访问基于http,https协议的路由请求。比如展示线上的活动等等。
大家可以发现,每一个方法的详细用法我都写的很详细了,关于pop操作的,大家看看注释就一目了然了,这一块我就不多说了。
最后还有一个方法,大家要注意哦:
- (void)openExternal:(NSString *)url;
这个方法主要是在app内通过浏览器来打开相关的URL的,这种需求在app开发的过程中虽然不多,但也有的。
好了,今天就写到这里吧,大家想看demo源码的话可以点击JKRouter下载地址
如果想直接集成到项目中的话,可以使用
pod "JKRouter"
下一篇,我将为大家分享如何实现json文件解析,以及权限等级的判断处理。
相关文章推荐
- iOS路由跳转(三)之JKRouter基础教程2
- iOS路由跳转(四)之JKRouter持续更新1
- iOS路由跳转(五)之JKRouter 2.0 脱胎换骨
- iOS基础教程之Objective-C初学指导
- ios开发基础教程
- 【无限互联】iOS开发视频教程— 2.11 iPhone开发之OC基础语法复习
- [ios开发基础之 Core Data [1] ]Core Data数据持久性存储基础教程
- iOS 5基础教程
- ios页面跳转基础
- IOS-OpenGLES 基础教程(一)
- ios学习二:处理类和对象的关系(来源objective-c基础教程)
- iOS教程:Core Data数据持久性存储基础教程
- PHP基础:页面(链接)跳转教程
- iOS 基础教程第一章
- ios地图开发之-Bing Maps地图基础教程
- 无限互联iOS开发视频教程,Objective-c基础部份,官方高清HD迅雷下载
- 根据iphone3/ios5开发基础教程-录制ios视频基础教程-视频下载专辑/反馈
- IOS教程一------IOS基础
- IOS-OpenGLES 基础教程(一)
- 洪小瑶学IOS(一):准备起航 <Objective-C基础教程>笔记