如今對於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凡是簡單。多是我如今的理解仍是不夠深吧~~~事件