iOS组件化同一个项目工程中的使用(一)

最近研究组件化、看了不少的资料,遇到很多坑,这里记录一下方便小伙伴参考。不会和大神一样我会用最朴实简单的语言表达,希望认识更多的朋友、我心愿世界和平

组件化个人感觉组件化维护成本较高、主要是为了解耦,但是有利必有弊

一、同一个工程下组件化实现思路,主要用中间件CTMediator(把它理解成沟通的桥梁,比如很多控制器之间跳转是直接push的,那么用到中间件CTMediator 就是通过CTMediator push的)

两个控制器的跳转实现:

1.项目导入CTMediator 文件,当然也可以pod导入 pod 'CTMediator'

 2.写跳转目标文件:目的就是写一个跳转到目标控制器的方法 准备提供给3步骤中CTMediator+CTMediatorManager类中的方法参数

注意:Target_TotalTargetVC对象名称Target_前缀是固定的,

Action_nativeDetailMainViewController方法名前缀Action_是固定的,参照CTMediator代码可见原因

Target_TotalTargetVC.h代码

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Target_TotalTargetVC : NSObject
- (UIViewController *)Action_nativeDetailMainViewController:(NSDictionary *)params;
@end

NS_ASSUME_NONNULL_END

Target_TotalTargetVC.m

#import "Target_TotalTargetVC.h"
#import "MainViewController.h"

@implementation Target_TotalTargetVC

- (UIViewController *)Action_nativeDetailMainViewController:(NSDictionary *)params
{
    MainViewController *VC = [[MainViewController alloc]init];
    VC.dic = params;
    return VC;
}
@end

3.写CTMediator分类CTMediator+CTMediatorManager

此分类目的:通过调用中间件CTMediator中的方法 ,方法中的参数来源于Target_TotalTargetVC对象,结果返回跳转的控制器UIViewController

 CTMediator+CTMediatorManager.h

#import "CTMediator.h"

NS_ASSUME_NONNULL_BEGIN

@interface CTMediator (CTMediatorManager)
- (UIViewController *)CTMediator_viewMainViewController:(NSDictionary*)params;
@end

NS_ASSUME_NONNULL_END

CTMediator+CTMediatorManager.m

#import "CTMediator+CTMediatorManager.h"

// 这里指的是Target_TotalTargetVC.h对象
NSString * const kCTMediatorTotalTargetObject = @"TotalTargetVC";
// 这指的是Target_TotalTargetVC.m中 Action_nativeDetailMainViewControllerf 方法
NSString * const kCTMediatorActionNativeDetailMainViewController = @"nativeDetailMainViewController";

@implementation CTMediator (CTMediatorManager)


- (UIViewController *)CTMediator_viewMainViewController:(NSDictionary*)params
{
    //由于CTMediator_viewMainViewController是CTMediator的扩展,所以可以直接使用CTMediator的方法
    UIViewController *viewController = [self performTarget:kCTMediatorTotalTargetObject
                                                    action:kCTMediatorActionNativeDetailMainViewController
                                                    params:params];
    if ([viewController isKindOfClass:[UIViewController class]]) {
        return viewController;
    } else {
        // 这里处理异常场景,具体如何处理取决于产品
        return [[UIViewController alloc] init];
    }
}
@end

4.最后一步,在你需要跳转的地方这样写就可以了

#pragma mark - 跳转
- (void)toMainViewController:(BOOL)isAnimate{
    UIViewController *VC = [[CTMediator sharedInstance]CTMediator_viewMainViewController:@{@"key":@"CTMetor传值你好"}];
    [self.navigationController pushViewController:VC animated:isAnimate];
}

这里只写同一个工程中的中间件,下一篇文章介绍   不同项目工程间的跳转。

猜你喜欢

转载自www.cnblogs.com/dujiahong/p/11205013.html