-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathREADME.md
215 lines (188 loc) · 6.46 KB
/
README.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# ZYQRouter
## 组件化路由
http://www.jianshu.com/p/e50478c51864
### 页面路由 Page Router
```Objective-C
/**
重定向 URLPattern 到对应的 newURLPattern
@param URLPattern 原scheme
@param newURLPattern 新scheme
*/
+ (void)redirectURLPattern:(NSString *)URLPattern toURLPattern:(NSString*)newURLPattern;
/**
* 注册 URLPattern 对应的 Handler,在 handler 中可以初始化 VC,然后对 VC 做各种操作
*
* @param URLPattern 带上 scheme,如 applink://beauty/:id
* @param handler 该 block 会传一个字典,包含了注册的 URL 中对应的变量。
* 假如注册的 URL 为 applink://beauty/:id 那么,就会传一个 @{@"id": 4} 这样的字典过来
*/
+ (void)registerURLPattern:(NSString *)URLPattern toHandler:(ZYQRouterHandler)handler;
/**
* 注册 URLPattern 对应的 ObjectHandler,需要返回一个 object 给调用方
*
* @param URLPattern 带上 scheme,如 applink://beauty/:id
* @param handler 该 block 会传一个字典,包含了注册的 URL 中对应的变量。
* 假如注册的 URL 为 applink://beauty/:id 那么,就会传一个 @{@"id": 4} 这样的字典过来
* 自带的 key 为 @"url" 和 @"completion" (如果有的话)
*/
+ (void)registerURLPattern:(NSString *)URLPattern toObjectHandler:(ZYQRouterObjectHandler)handler;
/**
* 取消注册某个 URL Pattern
*
* @param URLPattern
*/
+ (void)deregisterURLPattern:(NSString *)URLPattern;
/**
* 打开此 URL
* 会在已注册的 URL -> Handler 中寻找,如果找到,则执行 Handler
*
* @param URL 带 Scheme,如 applink://beauty/3
*/
+ (void)openURL:(NSString *)URL;
/**
* 打开此 URL,同时当操作完成时,执行额外的代码
*
* @param URL 带 Scheme 的 URL,如 applink://beauty/4
* @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关
*/
+ (void)openURL:(NSString *)URL completion:(void (^)(id result))completion;
/**
* 打开此 URL,带上附加信息,同时当操作完成时,执行额外的代码
*
* @param URL 带 Scheme 的 URL,如 applink://beauty/4
* @param parameters 附加参数
* @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关
*/
+ (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion;
/**
* 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object
*
* @param URL
*/
+ (id)objectForURL:(NSString *)URL;
/**
* 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object
*
* @param URL
* @param userInfo
*/
+ (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo;
/**
* 是否可以打开URL
*
* @param URL
*
* @return
*/
+ (BOOL)canOpenURL:(NSString *)URL;
/**
* 调用此方法来拼接 urlpattern 和 parameters
*
* #define ROUTE_BEAUTY @"beauty/:id"
* [ZYQRouter generateURLWithPattern:ROUTE_BEAUTY, @[@13]];
*
*
* @param pattern url pattern 比如 @"beauty/:id"
* @param parameters 一个数组,数量要跟 pattern 里的变量一致
*
* @return
*/
+ (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters;
```
### 方法路由 Method Router
```Objective-C
/**
*
* 调度工程内的组件方法
* [ZYQRouter performTarget:@"xxxClass" action:@"xxxxActionWithObj1:obj2:obj3" objects:obj1,obj2,obj3,nil]
* 内部自动 alloc init 初始化对象
*
* @param targetName 执行方法的类
* @param actionName 方法名
* @param object1,... 不定参数 不支持C基本类型
*
* @return 方法回参
*/
+ (id)performTarget:(NSString*)targetName action:(NSString*)actionName objects:(id)object1,...;
/**
*
* 调度工程内的组件方法
* [ZYQRouter performTarget:@"xxxClass" action:@"xxxxActionWithObj1:obj2:obj3" shouldCacheTaget:YES objects:obj1,obj2,obj3,nil]
* 内部自动 alloc init 初始化对象
*
* @param targetName 执行方法的类
* @param actionName 方法名
* @param shouldCacheTaget 设置target缓存
* @param object1,... 不定参数 不支持C基本类型
*
* @return 方法回参
*/
+ (id)performTarget:(NSString*)targetName action:(NSString*)actionName shouldCacheTaget:(BOOL)shouldCacheTaget objects:(id)object1,...;
/**
*
* 调度工程内的组件方法
* [ZYQRouter performTarget:@"xxxClass" action:@"xxxxActionWithObj1:obj2:obj3" shouldCacheTaget:YES objects:obj1,obj2,obj3,nil]
* 内部自动 alloc init 初始化对象
*
* @param targetName 执行方法的类
* @param actionName 方法名
* @param shouldCacheTaget 设置target缓存
* @param objectsArr 参数数组 不支持C基本类型
*
* @return 方法回参
*/
+ (id)performTarget:(NSString*)targetName action:(NSString*)actionName shouldCacheTaget:(BOOL)shouldCacheTaget objectsArr:(NSArray*)objectsArr;
/**
*
* 添加未找到Target 或 Action 逻辑
*
* @param notFoundHandler 未找到方法回调
* @param targetName 类名
*
* @return
*/
+ (void)addNotFoundHandler:(ZYQNotFoundTargetActionHandler)notFoundHandler targetName:(NSString*)targetName;
/**
* 删除Target缓存
*
* @return
*/
+ (void)removeTargetsCacheWithTargetName:(NSString*)targetName;
+ (void)removeTargetsCacheWithTargetNames:(NSArray*)targetNames;
+ (void)removeAllTargetsCache;
/**
不定参静态方法调用 (最多支持7个,原因不定参方法传给不定参方法实在没啥好办法。。。。暂时如此)
id result=(__bridge id)zyq_invokeSelectorObjects(@"Class", @"actionWithObj1:obj2:obj3",obj1,obj2,obj3,nil);
c类型转换配合__bridge_transfer __bridge
利用IMP返回值只是指针,不支持C基本类型
@param className 类名
@param selectorName,... 方法名,不定参数
@return 返回值
*/
void * zyq_invokeSelectorObjects(NSString *className,NSString* selectorName,...);
```
### 事件链路由 Responder Router
``` Objective-C
/**
响应链传递路由
用于解决多级嵌套UI对象的上级事件响应,省去delegate protocol逐级传递,跨级传递
@param eventName 事件名
@param userInfo 扩展信息
*/
-(void)zyq_routerEventWithName:(NSString *)eventName userInfo:(id)userInfo;
```
## Installation
### via CocoaPods
Install CocoaPods if you do not have it:-
````
$ [sudo] gem install cocoapods
$ pod setup
````
Create Podfile:-
````
$ edit Podfile
platform :ios, '5.0'
pod 'ZYQRouter', '~> 1.3.2'
$ pod install
````
Use the Xcode workspace instead of the project from now on.