如今对于iOS开发的要求随着时代的发展,也在渐渐地演变。这几天看到了不少JD的要求,多多少少都会提到这样的一个名字-组件化。objective-c
一开始我对于组件化的理解仍是很模糊的,总以为很高端很大气很上档次的感受。有种看得见摸不着的感受。个人理解就是把项目中的多个小功能组件进行私有库化,让他不依赖于项目,下降项目中的耦合性。其实在通常开发中也用到过。CocoaPods我理解为也是组件化的一种形式。ide
我的理解为跳转的统一派送中心,有点和物流中转站差很少。统一处理页面的跳转逻辑。函数
#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"
也一并带入。这样就会让项目耦合性很高。组件化
咱们依然使用上面的那两个控制器来实现。atom
咱们须要建立一个Target_Push
类,在这个类中的.h文件中咱们要添加一个函数来对目标控制器进行实例化,若是须要参数也能够进行一些赋值操做。spa
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface Target_Push : NSObject
- (UIViewController *)Action_NativeToCTMediatorPushViewController:(NSDictionary *)params;
@end
复制代码
而后咱们在.m文件中实现咱们所定义的函数code
#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
复制代码
咱们在建立的分类中定义这样的一个函数orm
#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凡是简单。多是我如今的理解仍是不够深吧~~~事件