CTMediator 的初体验
2020/4/2 23:01:44
本文主要是介绍CTMediator 的初体验,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
接触的前提
现在对于iOS开发的要求随着时代的发展,也在渐渐地演变。这几天看到了很多JD的要求,多多少少都会提到这样的一个名字-组件化。
个人对于组件化的理解
一开始我对于组件化的理解还是很模糊的,总觉得很高端很大气很上档次的感觉。有种看得见摸不着的感觉。我的理解就是把项目中的多个小功能组件进行私有库化,让他不依赖于项目,降低项目中的耦合性。其实在一般开发中也用到过。CocoaPods我理解为也是组件化的一种形式。
CTMediator——中介者
个人理解为跳转的统一派送中心,有点和物流中转站差不多。统一处理页面的跳转逻辑。
CTMediator使用教程
一般原生页面的跳转
#import "CTMediatorTestViewController.h" #import "CTMediatorPushViewController.h" @interface CTMediatorTestViewController () @property (nonatomic, strong) UIButton *normalPushButton; @end @implementation CTMediatorTestViewController - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.normalPushButton]; [self.normalPushButton mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(100); make.left.equalTo(self.view).offset(10); }]; } #pragma mark - 点击事件 - (void)normalPushButtonTapAction:(UIButton *)button{ CTMediatorPushViewController *normalPushVC = [[CTMediatorPushViewController alloc]init]; [self.navigationController pushViewController:normalPushVC animated:YES]; } #pragma mark - 懒加载 - (UIButton *)normalPushButton{ if (!_normalPushButton) { _normalPushButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_normalPushButton setTitle:@"常规Push" forState:UIControlStateNormal]; [_normalPushButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_normalPushButton addTarget:self action:@selector(normalPushButtonTapAction:) forControlEvents:UIControlEventTouchUpInside]; } return _normalPushButton; } @end 复制代码
这就是很简单原生页面的跳转。当我们一个页面要去跳转不同的ViewController
的时候就要在上面#import "xxxxxxx.h"
。久而久之页面就会有很多的 引入文件。如果这个ViewController
可以在别的项目中用到的话那是不是也要将这些引入的#import "xxxxxxx.h"
也一并带入。这样就会让项目耦合性很高。
CTMediator Target-Action 实现页面跳转
我们依然使用上面的那两个控制器来实现。
1.创建 Target-Action
我们需要创建一个Target_Push
类,在这个类中的.h文件中我们要添加一个函数来对目标控制器进行实例化,如果需要参数也可以进行一些赋值操作。
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface Target_Push : NSObject - (UIViewController *)Action_NativeToCTMediatorPushViewController:(NSDictionary *)params; @end 复制代码
然后我们在.m文件中实现我们所定义的函数
#import "Target_Push.h" #import "CTMediatorPushViewController.h" @implementation Target_Push - (UIViewController *)Action_NativeToCTMediatorPushViewController:(NSDictionary *)params{ CTMediatorPushViewController *pushVC = [[CTMediatorPushViewController alloc]init]; if ([params valueForKey:@""]) { } return pushVC; } @end 复制代码
2.创建 CTMediator 的 Category
我们在创建的分类中定义这样的一个函数
#import <CTMediator/CTMediator.h> #import "BaseViewController.h" @interface CTMediator (PushActions) - (BaseViewController *)dtp_mediator_ctmediatorPushViewControllerWithParams:(NSDictionary *)params; @end 复制代码
这里的ViewController
统一用了BaseViewController
如果是用UIViewController
不要忘记了\#import <UIKit/UIKit.h>
。然后我们来实现这个函数
#import "CTMediator+PushActions.h" // 1. kCTMediatorTarget_Push字符串 是 Target_xxx.h 中的 xxx 部分 NSString * const kCTMediatorTarget_Push = @"Push"; // 2. kCTMediatorActionNativeTo_NewsViewController 是 Target_xxx.h 中 定义的 Action_xxxx 函数名的 xxx 部分 NSString * const kCTMediatorActionNativeTo_NewsViewController = @"NativeToCTMediatorPushViewController"; @implementation CTMediator (PushActions) - (BaseViewController *)dtp_mediator_ctmediatorPushViewControllerWithParams:(NSDictionary *)params{ BaseViewController *viewController = [self performTarget:kCTMediatorTarget_Push action:kCTMediatorActionNativeTo_NewsViewController params:params shouldCacheTarget:NO]; if ([viewController isKindOfClass:[BaseViewController class]]) { GGLog(@"%@ 实例化页面成功", NSStringFromSelector(_cmd)); return viewController; }else{ GGLog(@"%@ 未能实例化页面", NSStringFromSelector(_cmd)); return [[BaseViewController alloc]init]; } } @end 复制代码
调用实现
#import "CTMediatorTestViewController.h" #import "CTMediator+PushActions.h" @interface CTMediatorTestViewController () @property (nonatomic, strong) UIButton *normalPushButton; @end @implementation CTMediatorTestViewController - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.normalPushButton]; [self.normalPushButton mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(100); make.left.equalTo(self.view).offset(10); }]; } #pragma mark - 点击事件 - (void)normalPushButtonTapAction:(UIButton *)button{ NSDictionary *params = @{@"title":@"CTMediatorPushViewController"}; BaseViewController *pushVC = [[CTMediator sharedInstance] dtp_mediator_ctmediatorPushViewControllerWithParams:params]; [self.navigationController pushViewController:pushVC animated:YES]; } #pragma mark - 懒加载 - (UIButton *)normalPushButton{ if (!_normalPushButton) { _normalPushButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_normalPushButton setTitle:@"Target-Action 实现页面跳转" forState:UIControlStateNormal]; [_normalPushButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_normalPushButton addTarget:self action:@selector(normalPushButtonTapAction:) forControlEvents:UIControlEventTouchUpInside]; } return _normalPushButton; } @end 复制代码
但是使用起来的过程 感觉似乎还没有之前的直接Push凡是简单。可能是我现在的理解还是不够深吧~~~
这篇关于CTMediator 的初体验的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-10-05Swift语法学习--基于协议进行网络请求
- 2022-08-17Apple开发_Swift语言地标注释
- 2022-07-24Swift 初见
- 2022-05-22SwiftUI App 支持多语种 All In One
- 2022-05-10SwiftUI 组件参数简写 All In One
- 2022-04-14SwiftUI 学习笔记
- 2022-02-23Swift 文件夹和文件操作
- 2022-02-17Swift中使用KVO
- 2022-02-08Swift 汇编 String array
- 2022-01-30SwiftUI3.0页面反向传值