在大型APP开发过程会用到iOS的组件化的相关技术,这里不得不提到路由控制,虽然路由并不是组件化的核心,但是它是构造大型复杂系统的基础。

目前国内的蘑菇街团队提供了MGJRouter路由库,使用比较简单,其原理主要是通过注册URL来实现路由跳转。主要有两个步骤:

1、注册URL生成路由表,2.openUrl实现跳转。

下面是一个简单的使用demo:

一、我们创建一个类RouterManager,然后在+(void)load方法里面统一注册url

#import <UIKit/UIKit.h>@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];
}

注意:第二个按钮跳转后同时给下个VC传值,第三个对应跳转后回调传值。

[iOS] 组件化之一:MGJRouter的简单实用相关推荐

  1. android 蘑菇街组件化,4. IOS 组件化(蘑菇街的路由+协议式)

    为了研究组件化,我们主要是讨论 蘑菇街的路由+协议式 和 中间件 讨论第一种方式,并参考 蘑菇街IOS组件化 ,我们来实现一个可以运行的demo,并讨论优缺点. 路由 用MGJRouter 单例,通过 ...

  2. iOS 组件化的三种方案

    组件化 本文主要介绍iOS组件化的三种方案 1.常⽤的三种方案 URL Scheme Target - Action Protocol - Class 匹配 1.1. URL Scheme路由 使 U ...

  3. iOS 组件化,插件化,模块化设计思路分析

    iOS 组件化,插件化设计思路分析 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,V ...

  4. iOS组件化搭建私有库

    开始之前先明确 两个文件名:1.BaseLibiOS(私有库项目名称) 2.BaseLibSpec(私有库索引名称) 两个gitLab的地址,1.(https://git.xxxx.com/BaseL ...

  5. 解读 iOS 组件化与路由的本质

    前言 虽然 iOS 组件化与路由的话题在业界谈了很久,但是貌似很多人都对其有所误解,甚至没搞明白"组件"."模块"."路由"."解 ...

  6. iOS-解读 iOS 组件化与路由的本质

    前言 虽然 iOS 组件化与路由的话题在业界谈了很久,但是貌似很多人都对其有所误解,甚至没搞明白"组件"."模块"."路由"."解 ...

  7. iOS 组件化与路由的本质

    前言 虽然 iOS 组件化与路由的话题在业界谈了很久,但是貌似很多人都对其有所误解,甚至没搞明白"组件"."模块"."路由"."解 ...

  8. 弱符号实现 iOS 组件化解耦

    黑客技术 点击右侧关注,了解黑客的世界! Java开发进阶 点击右侧关注,掌握进阶之路! Python开发 点击右侧关注,探讨技术话题! 作者 | 波儿菜 前言 今天在重温<程序员的自我修养&g ...

  9. iOS组件化开发流程

    iOS组件化开发流程 前期准备工作 注册仓库账号(gitHub/gitLabel/码云) 注册trunk 创建组件模版 在组件模版里编写自己的代码 修改.specs文件 push到仓库 给组件打一个t ...

  10. iOS组件化开发从开始到完整总结

    一.组件化介绍 需求来源 随着项目规模不断扩大,业务模块增多,开发过程中会有多条产品线(多人或多小组开发不同的功能);如果用传统的开发模式,会导致代码臃肿,编译速度越来越慢,开发效率低下,代码维护成本 ...

最新文章

  1. liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL
  2. 源码安装tensorflow
  3. AGC002[BCDEF]题解
  4. Button的使用(十):ImageButton
  5. Python3 Urllib学习
  6. 成功解决File frozen importlib._bootstrap, line 219, in _call_with_frames_removed ImportError: DLL lo
  7. 数塔问题和最长上升子序列问题
  8. upc 9519 New Game
  9. 【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)
  10. oracle中col 的用法,Oracle中的SUM用法讲解,
  11. 进程+协程 计算操作
  12. Flask 蓝图(Blueprint)
  13. 全网首发:MAC上运行SHELL脚本,typeset -l报错
  14. OPPO手机完美安装Kingroot实现一键root
  15. 数字电路基础知识——时序逻辑电路之存储器(SRAM、DRAM、ROM)
  16. Wampserver下载安装教程
  17. CUMCM 2021-B:乙醇偶合制备C4烯烃(1)
  18. xdb 服务_如何禁用Oracle的XDB及修改XDB服务端口
  19. 服务器系统和操作系统有什么区别
  20. python海龟交易策略_海龟交易法则的基本原理是什么,如何实现海龟交易策略?...

热门文章

  1. 马云说过的计算机名言,马云说过最洗脑10名言 马云经典语录大全
  2. 使用Foxmail管理hotmail邮箱时,只能接收邮件而无法发送邮件的就解决办法
  3. chemdraw如何改中文_教你如何快速自定义ChemDraw默认设置
  4. c语言中结构体中默认值,C Struct中的缺省值
  5. 程序员鄙视链, 所有工程师都鄙视php工程师, 为什么
  6. 上海南京路步行街向全球征集标识Logo及吉祥物设计
  7. 拉普拉斯变换的性质 - 对查表
  8. iOS系统自带指纹验证的使用
  9. n11mysql表设计_n11(n11数据库管理工具)
  10. mysql min pool size_数据库连接池问题 Max Pool Size