iOS组件化之Mediator方案

此方案使用Casa在github上提供的CTMediator库。

大概流程如下图


模块调用示意图


每个模块都提供一个Action接口和一个Mediator的category,

其他模块调用category中的方法,category通过runtime调用Action中的方法。

项目调用实例:

  [[MTMediator sharedInstance] position_pushOrderEditViewController:order];

#import "MTMediator+Position.h"
NSString * const kMTMediatorTargetPosition = @"Position";
NSString * const kMTMediatorActionPushOrderEditViewController = @"pushOrderEditViewController";
NSString * const kMTMediatorActionOpenPositions = @"openPositions";
@implementation MTMediator (Position)
- (UIViewController *) position_pushOrderEditViewController:(MTOrder *)order {   
         UIViewController *viewController = [self performTarget:kMTMediatorTargetPosition                                                                                                                                                  action:kMTMediatorActionPushOrderEditViewController                                                                                                              params:@{@"order":order}  shouldCacheTarget:NO];   
     if ([viewController isKindOfClass:[UIViewController class]]) { 

           return viewController;   

    }
    else{       

    return [[UIViewController alloc] init];   

    }

}

#import "MTOrderEditController.h"
@implementation Target_Position
- (UIViewController *)Action_pushOrderEditViewController:(NSDictionary *)params { 
      MTOrderEditController *editVC = [[MTOrderEditController alloc] init]; 
      MTOrder*order = params[@"order"];   
      editVC.orderModel= order;   
      editVC.quotationModel = order.qutationWeakModel;   
      UIViewController *controler = [UIViewController mt_getCurrentViewController]; 
      if (controler.navigationController) [controler.navigationController pushViewController:editVC animated:true];   
      returneditVC;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。