[iOS]コンポーネント化の1つ:MGJRouterのシンプルで実用的
3778 ワード
大規模なAPP開発プロセスではiOSのコンポーネント化に関する技術が使用されますが、ルーティングはコンポーネント化の核心ではありませんが、大規模で複雑なシステムを構築する基礎です.
現在、国内のキノコ街チームはMGJRouterルーティングライブラリを提供しており、使用は比較的簡単で、その原理は主にURLを登録することによってルーティングジャンプを実現することである.主に2つのステップがあります.
1、登録URL生成ルーティングテーブル、2.OpenUrlはジャンプを実現します.
次はdemoを簡単に使用します.
一、クラスRouterManagerを作成し、+(void)loadメソッドにurlを統一的に登録します.
二、呼び出し:
注意:2番目のボタンはジャンプした後に同時に次のVCに値を伝え、3番目のボタンはジャンプした後に値をコールバックします.
現在、国内のキノコ街チームはMGJRouterルーティングライブラリを提供しており、使用は比較的簡単で、その原理は主にURLを登録することによってルーティングジャンプを実現することである.主に2つのステップがあります.
1、登録URL生成ルーティングテーブル、2.OpenUrlはジャンプを実現します.
次はdemoを簡単に使用します.
一、クラスRouterManagerを作成し、+(void)loadメソッドにurlを統一的に登録します.
#import
@interface RouterManager : NSObject
@end
#import "RouterManager.h"
#import "MGJRouter.h"
#import "TestViewController.h"
#import "Test2ViewController.h"
#import "Test3ViewController.h"
@implementation RouterManager
+ (void)load {
[MGJRouter registerURLPattern:@"MGJ://Test1/PushMainVC" toHandler:^(NSDictionary *routerParameters) {
UINavigationController *navigationController = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"];
TestViewController *testVC = [[TestViewController alloc] init];
[navigationController pushViewController:testVC animated:YES];
}];
[MGJRouter registerURLPattern:@"MGJ://Test2/PushMainVC" toHandler:^(NSDictionary *routerParameters) {
UINavigationController *navigationControler = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"];
NSString *labelText = routerParameters[MGJRouterParameterUserInfo][@"text"];
Test2ViewController *test2 = [[Test2ViewController alloc] init];
test2.labelText = labelText;
[navigationControler pushViewController:test2 animated:YES];
}];
[MGJRouter registerURLPattern:@"MGJ://Test3/PushMainVC" toHandler:^(NSDictionary *routerParameters) {
UINavigationController *navigationControler = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"];
void(^block)(NSString *) = routerParameters[MGJRouterParameterUserInfo][@"block"];
Test3ViewController *test3 = [[Test3ViewController alloc] init];
test3.btnClickBlock = block;
[navigationControler pushViewController:test3 animated:YES];
}];
[MGJRouter registerURLPattern:@"MGJ://Test2/getMainVC" toObjectHandler:^id(NSDictionary *routerParameters) {
NSString *labelText = routerParameters[MGJRouterParameterUserInfo][@"text"];
Test2ViewController *vc = [[Test2ViewController alloc] init];
vc.labelText = labelText;
return vc;
}];
}
@end
二、呼び出し:
#import "ViewController.h"
#import "MGJRouter.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)pushVC:(id)sender {
[MGJRouter openURL:@"LXY://Test1/PushMainVC" withUserInfo:@{@"navigationVC":self.navigationController} completion:nil];
}
- (IBAction)passNextClick:(id)sender {
[MGJRouter openURL:@"MGJ://Test2/PushMainVC" withUserInfo:@{@"navigationVC":self.navigationController,@"text":@" "} completion:nil];
}
- (IBAction)blockBtnClick:(id)sender {
[MGJRouter openURL:@"MGJ://Test3/PushMainVC" withUserInfo:@{@"navigationVC":self.navigationController,
@"block":^(NSString *text){
NSLog(@"%@",text);
}} completion:nil];
}
- (IBAction)backClick:(id)sender {
[self.navigationController pushViewController:[MGJRouter objectForURL:@"MGJ://Test2/getMainVC" withUserInfo:@{@"text":@"dsfdsf"}] animated:YES];
}
注意:2番目のボタンはジャンプした後に同時に次のVCに値を伝え、3番目のボタンはジャンプした後に値をコールバックします.