JLRoutes 的問題主要在于查找 URL 的實現(xiàn)不夠高效,通過遍歷而不是匹配。還有就是功能偏多。
HHRouter 的 URL 查找是基于匹配,所以會更高效,MGJRouter 也是采用的這種方法,但它跟 ViewController 綁定地過于緊密,一定程度上降低了靈活性。
- 將DCURLRouter文件夾拖到項目中
-
配置DCURLRouter.plist文件
- 加載DCURLRouter.plist文件數(shù)據(jù)
[DCURLRouter loadConfigDictFromPlist:@"DCURLRouter.plist"];
- push
// 不需要拼接參數(shù)直接跳轉(zhuǎn)
[DCURLRouter pushURLString:@"dariel://twoitem" animated:YES];
// 直接把參數(shù)拼接在自定義url末尾
NSString *urlStr = @"dariel://twoitem?name=dariel&userid=213213";
[DCURLRouter pushURLString:urlStr animated:YES];
// 可以將參數(shù)放入一個字典
NSDictionary *dict = @{@"userName":@"Hello", @"userid":@"32342"};
[DCURLRouter pushURLString:@"dariel://twoitem" query:dict animated:YES];
// 如果當前控制器和要push的控制器是同一個,可以將replace設(shè)置為Yes,進行替換.
[DCURLRouter pushURLString:@"dariel://oneitem" query:dict animated:YES replace:YES];
// 重寫了系統(tǒng)的push方法,直接通過控制器跳轉(zhuǎn)
TwoViewController *two = [[TwoViewController alloc] init];
[DCURLRouter pushViewController:two animated:YES];
modal
// 不需要拼接參數(shù)直接跳轉(zhuǎn)
[DCURLRouter presentURLString:@"dariel://threeitem" animated:YES completion:nil];
// 直接把參數(shù)拼接在自定義url末尾
NSString *urlStr = @"dariel://threeitem?name=dariel&userid=213213";
[DCURLRouter presentURLString:urlStr animated:YES completion:nil];
// 可以將參數(shù)放入一個字典
NSDictionary *dict = @{@"userName":@"Hello", @"userid":@"32342"};
[DCURLRouter presentURLString:@"dariel://threeitem" query:dict animated:YES completion:nil];
// 給modal出來的控制器添加一個導(dǎo)航控制器
[DCURLRouter presentURLString:@"dariel://threeitem" animated:YES withNavigationClass:[UINavigationController class] completion:nil];
// 重寫了系統(tǒng)的push方法
ThreeViewController *three = [[ThreeViewController alloc] init];
[DCURLRouter presentViewController:three animated:YES completion:nil];
- pop/dismiss
/** pop掉一層控制器 */
+ (void)popViewControllerAnimated:(BOOL)animated;
/** pop掉兩層控制器 */
+ (void)popTwiceViewControllerAnimated:(BOOL)animated;
/** pop掉times層控制器 */
+ (void)popViewControllerWithTimes:(NSUInteger)times animated:(BOOL)animated;
/** pop到根層控制器 */
+ (void)popToRootViewControllerAnimated:(BOOL)animated;
/** dismiss掉1層控制器 */
+ (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion;
/** dismiss掉2層控制器 */
+ (void)dismissTwiceViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion;
/** dismiss掉times層控制器 */
+ (void)dismissViewControllerWithTimes:(NSUInteger)times animated: (BOOL)flag completion: (void (^ __nullable)(void))completion;
/** dismiss到根層控制器 */
+ (void)dismissToRootViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion;
