zoukankan      html  css  js  c++  java
  • 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];
    }

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

  • 相关阅读:
    Core Animation系列之CADisplayLink(转)
    由App的启动说起(转)
    Xcode断点的一些黑魔法
    好代码的标准
    Java JPS找不到正在执行的java进程 jps cannot see running java process
    JetBrain server certificate is not trusted 弹出框
    Window7 定制 Explore中的右键菜单
    Go语言入门: Chapter1
    针对缓存在Redis中的聊天消息的持久化方案分析
    轻型Database- sqlite入门
  • 原文地址:https://www.cnblogs.com/dujiahong/p/11205013.html
Copyright © 2011-2022 走看看