- Router支持,三种路由方式
push
页面跳转present
页面弹出invoke
方法调用
- 目标如果需要被展示(
push
,present
),则需要实现中的相应内容。 - 目标如果需要被调用(
invoke
),则调用的目标方法必须是类方法
。
- 在跳转目标
TargetViewController
中引入接口<GLRouterProtocol>
,并实现相应的指定方法 - 使用如下代码
/* * C函数,无需类名,直接调用 * rto_dsp(NSString *str, BOOL (^handle)(id tgt)) */ // 从当前页面跳转至TargetViewController rto_dsp(@"SCHEME:https://push/TargetViewController", nil); // 在当前页面弹出TargetViewController rto_dsp(@"SCHEME:https://present/TargetViewController", nil);
- 确认在目标Class存在该函数,例如
// <Tools.h> @interface Tools : NSObject @end // <Tools.m> @implementation Tools - (BOOL)sendMessage:(NSString *)msg from:(NSString *)from to:(NSString *)to { BOOL success = (msg!=nil && from!=nil && to!=nil); if(success){ NSLog(@"%@ 给 %@ 发送了消息: %@", from, to, msg); }else{ NSLog(@"发送失败"); } return success; } @end
- 使用如下代码进行调用
/* * C函数,无需类名,直接调用 * rto_ivk(NSString *str, void (^handle)(id ret)) */ // 无返回值 rto_ivk(@"SCHEME:https://invoke/Tools/sendMessage:from:to:?p1=Hello World&p2=Tom&p3=Jerry", nil); // output “Tom 给 Jerry 发送了消息: Hello World” // 有返回值 rto_ivk(@"SCHEME:https://invoke/Tools/sendMessage:from:to:?p1=Hello World&p2=Tom&p3=Jerry", ^(id ret){ // ret 为返回值 BOOL result = [ret BoolValue]; }); // output “Tom 给 Jerry 发送了消息: Hello World”
GLRouter is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'GLRouter'
目前市面上外部跳转入进app的方案,方式大致分为两种:
- schema (iOS all)
例如:weixin:https://dl/scan 优势:调用简单 劣势:部分浏览器无法跳入,例如微信中的网页浏览;无法通过JS判断app是否启动
- Universal Link (iOS9+)
必须:iOS开发时配置一个与app相关联的域名
- 2.1.2
- 在UIViewController的扩展类中增加了两个方法,用于初步防止路由过程中
赋空值
和赋错值
可能存在的崩溃问题
- 在UIViewController的扩展类中增加了两个方法,用于初步防止路由过程中
- 2.1.1
- 优化了路由参数传递
url
时参数可能被截断。如传递url
,请将其置为最后一个路由参数。 例如:rto_dsp(@"App:https://push/MyWebViewController?title=标题&url=https://www.home.com/page.html?a=1&b=2&c=3&d=4", nil);
- 优化了路由参数传递
- 2.1.0
- 增加了便捷初始化方案: rto_init_tab( scheme, routingTableName, routingTableBundle )
LiGuoliang [email protected]
GLRouter is available under the MIT license. See the LICENSE file for more info.