iOS项目跳转解耦实战(一)

今天写的这个主题分为四篇文章,今天是第一篇,我们回讲解的比较简单一些,主要看看大工程中各种各样的跳转模式,各个控制器传参数。在这种情况下,就会出现你中有我,我中有你,十分臃肿,牵一发而动全身。那么怎么才能够解除这种繁重的耦合情况呢,下面看看我是怎么做的吧!

(一)首先我们针对Present跳转来讲,我们创建一个基类控制器BSY_DecouplingControlBaseVC,在.h文件中协商写上这三个方法,分别是:

/**

 在目标控制器初始化的时候传入参数(可以为空)

 @param parameters 参数

 @return 返回初始化的自己

 */

-(id)initWithParameters:(id)parameters;

/**

 跳转事件

 @param classString 需要跳转的控制器

 @param object 跳转的时候需要传入的参数

  @param completeBlock 跳转完成的回调

 */

-(void)bsy_JumpVC:(NSString *)classString object:(id)object animate:(BOOL)animate completeBlock:(void(^)(id completeObj))completeBlock;




/**

 dissMiss事件

 @param classString 需要跳转的控制器

 @param childClass 需要disMiss的控制器字典

 @param object 跳转的时候需要传入的参数

 @param completeBlock 跳转完成的回调

 @param animate 是否需要动画

 */

-(void)bsy_DissMissVC:(NSString *)classString childClass:(NSMutableDictionary *)childClass object:(id)object animate:(BOOL)animate completeBlock:(void(^)(id completeObj))completeBlock;


其次,我们在.m文件中去实现方法,如下:


/**

 重写init方法


 @param parameters 参数

 @return 返回VC

 */

-(id)initWithParameters:(id)parameters

{

    self = [super init];


    if (self) {



    }

    return self;

}

/**

 跳转事件

 @param classString 需要跳转的控制器

 @param object 跳转的时候需要传入的参数

 @param completeBlock 跳转完成的回调

 */

-(void)bsy_JumpVC:(NSString *)classString object:(id)object animate:(BOOL)animate completeBlock:(void(^)(id completeObj))completeBlock

{

    if ([classString isKindOfClass:[NSString class]]) {

        Class class = NSClassFromString(classString);

        [self presentViewController:(UIViewController *)[[class alloc]initWithParameters:object] animated:animate completion:nil];

        if (completeBlock) {

            completeBlock(NSStringFromClass([class class]));

        }

    }else{


        if (completeBlock) {

            completeBlock(NSStringFromClass([NSError class]));

        }


    }

}

/**

 dissMiss事件

 @param classString 需要跳转的控制器

 @param object 跳转的时候需要传入的参数

 @param completeBlock 跳转完成的回调

 */

-(void)bsy_DissMissVC:(NSString *)classString childClass:(NSMutableDictionary *)childClass object:(id)object animate:(BOOL)animate completeBlock:(void(^)(id completeObj))completeBlock

{

    if ([classString isKindOfClass:[NSString class]]) {

        Class class = NSClassFromString(classString);

        UIViewController *vc = nil;

        vc = [childClass objectForKey:classString];

        if ([vc isKindOfClass:[class class]]) {

            [vc dismissViewControllerAnimated:animate completion:nil];

            if (completeBlock) {

                completeBlock(NSStringFromClass([class class]));

            }

        }else{

            if (completeBlock) {

                completeBlock(NSStringFromClass([NSError class]));

            }

        }

    }else{

        if (completeBlock) {

            completeBlock(NSStringFromClass([NSError class]));

        }

    }

}



最后,我们以BSY_DecouplingControlBaseVC为父类,创建需要的控制器,就可以实现了传参数与跳转,这样就省去了每个控制器的.h文件中各种各种的属性定义。如下:


    [self bsy_JumpVC:NSStringFromClass([PresentController class]) object:nil animate:true completeBlock:^(id completeObj) {


    }];

至于pushViewController跳转也就照葫芦画瓢,我不多讲了。这种方式有很多好处,我们传什么参数,直接在各自的.m文件中获取即刻,这样就省去了每个控制器的.h文件中各种各种的属性定义,这也是解除耦合的一种方法,小工程还好,我现在在的公司做的事系统类型的iPad应用,工程文件都是800多个文件,如果每个控制器都是中各种各种的属性定义,你中有我,我中有你那就没有办法开发了。当然这只是其中最简单的一部分,后面三部分我会讲解的更多一些。具体Demo代码地址:https://gitee.com/baishiyun/ios_project_jump_decoupling_real_war__1/tree/master,如果觉得不错的请给一个星星吧!您的支持就是我前进的动力,谢谢!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值